美文网首页
集合类---List 之 ArrayList和LinkedLis

集合类---List 之 ArrayList和LinkedLis

作者: 梦飞成2012 | 来源:发表于2017-12-09 15:02 被阅读45次

一、ArrayList

1、ArrayList的默认大小是10,如果空间不够用的时候,调用grow()方法,
每次增加50%的空间。
2、ArrayList底层实现是数组,查询某个位置(index)和set值,效率很高,达到O(1),add方法效率也很高,也是O(1)。
3、add(int index, E element)效率很低,因为要将该位置后面的元素向后平移一个位置,平移调用System.arraycopy(Object src, int srcPos, Object dest, int destPos,int length)方法。
4、void trimToSize()方法用来缩小数组大小,以节约内存。
例如,如果我们之前使用该ArrayList保存了10000个对象,后面对象被回收了,只有15个实例左右,但是目前占用的空间还是10000个,显示的调用trimtosize就可以将数组的空间占用降到15个,极大的节约了内存。
5、ArrayList是非线程安全的,可以使用Collections. synchronizedList(new ArrayList<>())来实现线程安全。

二、LinkedList

1、底层通过链表实现,链表无容量限制,但是双向链表本身就占用很多空间。
2、get(i)/set(i)效率很低,需要遍历链表到达某个位置
3、但是删除和插入效率很高,不需要移动后面的元素
4、非线程安全,通过Collections.synchrosizedList(new LinkedList());实现线程安全。

三、LinkedList和ArrayList的区别

1、LinkedList底层是链表实现的,而ArrayList的底层是数组。
2、对于随机访问set(i)、get(i)ArrayList优于LinkedList,因为LinkedList需要遍历链表。
3、对于add和remove操作,LinkedList优于ArrayList,因为ArrayList要移动后面的数据。

参考资料:

Java集合框架:ArrayList
Java集合框架:LinkedList

相关文章

网友评论

      本文标题:集合类---List 之 ArrayList和LinkedLis

      本文链接:https://www.haomeiwen.com/subject/dkouixtx.html