Java心得--集合、列表

1.:

Collection:(在util包中)

Set:(序、元素不可重复)

List:(序、可重复;通过角标索引):    

ArrayList:底层数据类型为数组,增删慢,查找(访问)快

LinkedList:底层数据类型为链表;增删快,查找(访问)慢。

Vector:底层数据类型为数组;元老级别,线程安全,但是增删和查找都不快,子类:Stack(先进后出)。

2.   集合:长度可变,可存不同数据类型,只存储对象。

     数组:长度不可变,可存同一种数据类型,存储对象和基本数据类型。

3. 注意:数组、StringBuffer、乃至后文描述的各种集合类型,都是一种可以保存数据以及对象的“容器”。

 Java用集合类来容纳不同种类的数据,这种容纳是建立在未知的基础上,即Java要用有限种类的集合类,来容纳无限种类的数据对象。

分类:Java的集合类可以分为三类:集、列表和映射

4. 列表(List)

List列表区分元素的顺序,即List列表能够精确的控制每个元素插入的位置,用户能够使用索引(元素在List中的位置)来访问List中的元素。和Set集合的不同,List允许包含重复元素。

5.斜体标识的是接口,虚线箭头表示“实现”关系

                               

需注意:

JavaSDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”。

Collection接口有多个子接口,其中最重要的两个java.util.Set和java.util.List分别描述集Set和列表List。

Collection中的方法:

publicboolean add(E e):向集合中添加一个元素,加入成功返回ture。在其子接口中方法发生了分化,比如:Set接口添加重复元素时会被拒绝并返回false,而List接口则会接受重复元素并返回ture。

publicboolean remove(Object o) :从集合中删除指定元素

publicint size():返回元素个数,即遍历集合。

public booleancontains(Object obj):判断是否包含指定元素

publicboolean isEmpty():判断集合是否为空

publicObject[] toArray():返回包含当前集合中所有元素上的数组。

public  void clear():删除所有元素

6.   不论Collection的实际类型如何,它都支持一个方法—public Iteratoriterator();该方法(iterator为一个接口,包含三个方法)返回一个枚举器(迭代器)对象,使用该方法即可遍历Collection中的每一个元素。用法:

方法一:

Iteratorit = c.iterator();  //c为集合对象

While(it.hasNext()){//hasNext()方法判断是否还有下一个元素。

     Object obj = it.next();//next()获取下一个元素,返回一个对象(Object),一开始,指针都指在第一个元素的前面。

}

方法二:

for(Iteratorit = c.iterator();it.hasNext();){

    Object obj = it.next();

}

方法二更好一些,一是代码简练;二是new的it对象在循环完了就不用了,while循环还保留着,但是for循环中的可以被垃圾回收机制收回。

7. java.util.List接口描述的是列表结构,允许程序员对列表元素的插入位置进行精确控制,并增加了根据元素索引来访问元素、搜索元素等功能。在继承父接口Collection的基础之上,List接口新增的相应方法:

voidadd(int index, E element):在索引号后插入对象

   boolean add(Ee):将对象e插到链表最后

Eremove(int index):删除指定索引号元素

booleanremove(Object o):删除列表第一个指定内容元素

Eget(int index):得到指定索引号的元素,没有用到泛型时,返回值类型是Object,所以在这种情况下要根据实际,把这个返回对象强制转换为它原来的类型。

intsize():同父接口

intindexOf(Object obj):找到Object元素,返回它的索引值

List<E>subList(int fromIndex, int toIndex):截子链,(有开头结尾的方法,都是包含开头不包含结尾)

voidclear()

      Java.util.List接口的实现类(子类)有多个,分别体现了列表的不同分化形式。

ArrayList、Vector、Stack、LinkedList

8.Vctor类

  实线了list接口,对于数据类型结构中的“向量”。

@@@构造方法:

Vctor():构造一个空向量,并设置其初始值为10,标准容量增量为0;

Vctor(intinitialCapacity):使用指定初始值为和容量增量为0构造一个空向量;

Vctor(intinitialCaption,int capacipyIncrement):使用已知初始值为和容量增量构造一个空向量。在实际项目中最常用。

Vctor(<E>c):该构造方法体现了java的新特性—泛型,只有在使用Vctor前,明确知道其中容纳对象的类型,才可以使用这种类型的构造方法。

@@@其他方法:

voidadd(E obj):向集合中添加一个元素,体现泛型特性

insertElementAt(Eobj,int index):在指定索引处添加元素

setElementAt(Eobj,int index):替换指定索引处元素,与上一个方法很相似

publicboolean removeElement(Object obj) :从集合中删除指定元素,可删除第一个obj对象,用来表示是否在Vctor中找到并删除指定对象。

void removeElementAt(intindex):删除指定索引元素

void removeAllElement():删除所有元素,可删除Vctor中所有对象,该Vctor对象的size重置为0

publicint size():返回元素个数,即遍历集合。

EelementAt(int index):依次访问Vctor中各元素,可通过此方法将对象里索引号为i的元素及泛型或Object返回

Vctor里的方法参数中插入的位置(角标)在对象后面。

9.先进后出的Stack类

Stack是Vector类的子类,特点:“后进先出”(Last InFirst Out)类型的容器,即最后一个被“压(push)”进堆栈中的对象,会被第一个“弹(pop)”出来。

  

 

@@@构造方法

Stack():用于创建支持“后进先出”访问方式的对象
例:Stack st=new Stack();
       Stack <String> st = newStack();

@@@其他方法

Epeek() 返回栈顶元素,但没有弹出栈顶元素

E pop()弹出栈顶元素,并返回其中的对象。

Epush(E item) 向堆栈顶端压入item对象,同时将item对象返回。

booleanempty() 判断堆栈是否为空,如果该堆栈为空,返回true,反之返回false。

注意:由于Stack继承了Vector类,所以以下语句从语法上来讲,不会有问题。但却破坏了堆栈“后进先出”的特性,所以,不推荐使用。

st.addElement("badusage1");

st.addElement("badusage2");

st.addElement("badusage3");

for(inti=0;i<st.size();i++){

      System.out.println(st.elementAt(i));

}

10.LinkedList类:链式存储方方式                                                                                                                                          

    

逻辑上相邻的两个元素在物理上不相邻,通过链条连接

@@@构造方法:

LinkedList()

LinkedList(Collectionc):Collection是java里线性表类集合的基类这种构造方法可以把Collection内的各元素装载到LinkedList对象里。

LinkedList(<E>C)

@@@其他方法:

  添加元素:

void addFirst(Eobj)和void addLast(E obj):在List接口中add的方法的基础上扩展了:在表头和表尾添加元素。

获取元素:

   E getFirst(E obj)和ObjectgetLast(E obj):在List接口中get的方法的基础上扩展了:在表头和表尾获取元素。

删除元素:

   E removeFirst(E obj)和ObjectremoveLast(E obj):在List接口中remove的方法的基础上扩展了:在表头和表尾添加元素。

11.数组:

(1)可以根据数组起始地址和其中元素的索引号,很快地定位到数组中的任意元素

(2)插入、删除元素等操作效率底

链表:

(1)链表中元素访问的代价要比数组高。

(2)能很方便地完成元素的插入和删除工作

 

posted @ 2012-04-28 10:31  yangkai_keven  阅读(215)  评论(0编辑  收藏  举报