List接口下的集合

来源:互联网 发布:鼠标测试软件 编辑:程序博客网 时间:2024/05/30 23:21
 

结构
ArrayList 继承了 抽象的List 实现了List接口
抽象的List继承了抽象的Collection实现了List接口
抽象的Collection实现了Collection接口
Collection接口继承了Iterable接口,iterator迭代器就这么来的。
Vector也是这样的结构。

LinkedList 继承了 抽象的连贯的List 实现了List接口
抽象的连贯的List继承了抽象的List
抽象的List继承了抽象的Collection实现了List接口
抽象的Collection实现了Collection接口
Collection接口继承了Iterable接口,iterator迭代器就这么来的。

性能
Vector和ArrayList
 Vector在java1.0的时候存在,ArrayList在java1.2的时候存在,就性能上来说,ArrayList在遍历,对集合元素的重新赋值,在集合最后插入元素方面都要高于Vector,在集合中随机插入元素的速度不相上下,也就是get(),set(int index,E e),add()方法要比Vector速度更快。但是ArrayList是线程不安全的,而Vector是线程安全的。就容量来说,Vector可以指明容量和容量的增长量。ArrayList用迭代器也稍比Vector快。如果数据都一致,速度就更快。

Vector和LinkedList
Vector的在遍历和重新给元素赋值以及在集合的最后添加元素方面速度都要高于LinkedList,但是在集合中随机插入元素速度要慢很多,慢到LinkedList插入了几遍,Vector还没插完。LinkedList的迭代器也比Vector的快。我的电脑在100万数据的情况下快了将近20毫秒。

ArrayList和LinkedList
ArrayList的随机插入和Vector差不多,也是LinkedList插完N遍了它还没插完的那种,Vector在遍历,集合的最后插入元素和给元素重新赋值都要快于LinkedList,那么ArrayList就不要谈了。迭代器的速度再数据都相同的情况下,ArrayList比LInkedList快一点,我的电脑在100万的数据下差了4毫秒,数据不同的时候差了20毫秒左右。LinkedList的迭代器是跟数据有关的,如果数据一致,迭代的速度就很快,如果不一致,就只能比Vector要快一点点了。而ArrayList和Vector的迭代器和数据是无关的。

扩展
如何把ArrayList,LinkedList变为线程安全的?
Collections.synchronizedList(List<T>); return List<T>
Collections是一个集合的工具类,可以获得线程安全的List,无序Map,有序Map,无序Set,有序Set。
也可以将List进行排序(sort method)。

0 0
原创粉丝点击