欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

JavaSE集合,

来源: javaer 分享于  点击 47236 次 点评:211

JavaSE集合,


1.List接口

底层使用数组实现

List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。

List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

public interface List<E> extends Collection<E> {
//...
}

List 集合里添加了一些根据索引来操作集合元素的方法:

void add(int index, Object ele)
boolean addAll(int index, Collection eles)
Object get(int index)
int indexOf(Object obj)
int lastIndexOf(Object obj)
Object remove(int index)
Object set(int index, Object ele)
List subList(int fromIndex, int toIndex)

JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。


2.ArrayList

采用数组的形式保存对象,将对象存放在连续的位置中,进行遍历或查看非常方便,支持随机访问,插入或删除时比较麻烦。

ArrayList 是 List 接口的典型实现类,本质上,ArrayList是对象引用的一个变长数组。

ArrayList 是线程不安全的,而 Vector 是线程安全的,即使为保证 List 集合线程安全,也不推荐使用Vector。

Arrays.asList(…) 方法返回的 List 集合既不是 ArrayList 实例,也不是 Vector 实例。 Arrays.asList(…) 返回值是一个固定长度的 List 集合。


3.LinkedList

方便插入和删除,但是不支持快速随机访问,如果需要访问LinkedList中的第n个元素,必须从头开始查找,依次检查n-1个元素。

对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高。

新增方法:

void addFirst(Object obj)
void addLast(Object obj)    
Object getFirst()
Object getLast()
Object removeFirst()
Object removeLast()

4.Vector

Vector 是一个古老的集合,JDK1.0就有了。大多数操作与ArrayList相同,区别之处在于Vector是线程安全的。

在各种list中,最好把ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList。Vector总是比ArrayList慢,所以尽量避免使用。

新增方法:

void addElement(Object obj)
void insertElementAt(Object obj,int index)
void setElementAt(Object obj,int index)
void removeElement(Object obj)
void removeAllElements()

遍历Vector:

Vector<String> vector = new Vector<String>();
vector.add("one");
vector.add("tow");
vector.add("three");
vector.add("four");
vector.add("five");
//使用枚举
Enumeration<String> en = vector.elements();
while(en.hasMoreElements()){
    String str = en.nextElement();
    System.out.println(str);
}
//使用for
for(int i = 0;i<vector.size();i++){
    System.out.println(vector.get(i));
}
//使用iterator
Vector<String> vector = new Vector<String>();
    vector.add("one");
    vector.add("tow");
    vector.add("three");
    vector.add("four");
    vector.add("five");
    Iterator iterator = vector.iterator();
    while (iterator.hasNext()) {
        String str = (String) iterator.next();
        System.out.println(str);

    }
//使用 ListIterator 
ListIterator iListIterator = vector.listIterator();
        while (iListIterator.hasNext()) {
            String str = (String) iListIterator.next();
            System.out.println(str);
        }

5.ListIterator接口

List 额外提供了一个 listIterator() 方法,该方法返回一个 ListIterator 对象。

ListIterator 接口继承了 Iterator 接口,提供了专门操作 List 的方法:

public interface ListIterator<E> extends Iterator<E> {
void add()

boolean hasPrevious()
Object previous()

Boolean hasNext()
Object next()
//...
}

6.Iterator和ListIterator主要区别

① ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历。

但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历,Iterator就不可以。

② ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator 没有此功能。

③ ListIterator有add()方法,可以向List中插入对象,而Iterator不能。

④ 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能修改。因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。

ListIterator<E>接口方法如下:


7.ArrayList,Vector, LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。

Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差。

而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

相关文章

    暂无相关文章

用户点评