ArrayList、Vector、LinkedList的异同点
来源:互联网 发布:垓下歌与大风歌 知乎 编辑:程序博客网 时间:2024/05/18 17:23
ArrayList、Vector、LinkedList的异同点
Collection类的继承图如下:
从图中可以看出,LinkedList与ArrayList、ArrayDeque这三者都实现了List接口.所有使用方式也很相似,主要区别在于因为实现方式的不同,所以对不同的操作具有不同的效率。
- ArrayList是一个可改变大小的数组.当更多的元素加入到ArrayList中时,其大小将会动态地增长。内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组。
- List arrayList = new ArrayList();
如果像上面这样使用默认的构造方法,初始容量被设置为10。当ArrayList中的元素超过10个以后,会重新分配内存空间,使数组的大小增长到16。可以通过调试看到动态增长的数量变化:10->16->25->38->58->88->…(增长幅度为:len/2 + 1) - LinkedList是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList。
当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义。
- Vector和ArrayList类似,但属于强同步类。如果你的程序本身是线程安全的(thread-safe,没有在多个线程之间共享同一个集合/对象),那么使用ArrayList是更好的选择。
- Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%。而LinkedList还实现了Queue接口,该接口比List提供了更多的方法,包括
offer(),peek(),poll()等。
注意: 默认情况下ArrayList的初始容量非常小,所以如果可以预估数据量的话,分配一个较大的初始值属于最佳实践,这样可以减少调整大小的开销。
- LinkedList与ArrayList、ArrayDeque的实现机制完全不同,ArrayList、ArrayDeque内部以数组的形式来保存集合中的元素,因此随机访问集合元素时有较好的性能;而LinkedList内部以链表的形式来保存集合中的元素,因此随机访问集合元素时性能较差,但在插入、删除元素时性能非常出色(只需改变指针所指的地址即可)。
- 如果需要遍历List集合元素,对于ArrayList、Vector集合,应该使用随机访问方法(get)来遍历集合元素,这样性能更好;对于LinkedList集合,则应该采用迭代器(Iterator)来遍历集合元素;
如果需要经常执行插入、删除操作来改变List集合的大小,则应该使用LinkedList集合,而不是ArrayList。使用ArrayList、Vector集合需要经常重新分配内部数组的大小,其时间开销往往是使用LinkedList的几十倍,效果更差; - 如果有多个线程需要同时访问List集合中的元素,开发者可考虑使用Collections工具类将集合包装成线程安全的集合。
阅读全文
0 0
- ArrayList、Vector、LinkedList的异同点
- ArrayList、LinkedList和Vector的异同点
- Vector,ArrayList,LinkedList的异同
- Java中ArrayList、Vector、LinkedList三者的异同点
- Java ArrayList、Vector、LinkedList 异同
- Java进阶(四十六)简述ArrayList、Vector与LinkedList的异同点
- 详解Java中ArrayList、Vector、LinkedList三者的异同点
- vector和arraylist的异同点.
- LinkedList和ArrayList异同点
- List集合:Vector ArrayList LinkedList异同
- java(20130801)异常、集合、ArrayList和LinkedList的比较、Vector和ArrayList的异同
- ArrayList和Vector的异同
- Vector ArrayList LinkedList 的比较
- ArrayList,LinkedList,Vector的区别
- LinkedList ArrayList Vector的区别
- LinkedList ArrayList Vector的比较
- Vector,ArrayList, Linkedlist的区别
- ArrayList、LinkedList、Vector的比较
- spring的注解
- 使用JQuery的前端验证
- 新手安装laravel框架
- linux命令: chown
- nodejs访问sqlite3
- ArrayList、Vector、LinkedList的异同点
- download
- Spring框架简介
- vector C++ copy方法
- VBA insert、select Mysql
- centos 7 下安装postgreSQL
- Spring MVC 框架搭建及详解
- 通过设置偏移 添加RecyclerView分隔线
- LintCode全AC题解(共331题)