我们都知道Java的集合存储分为值存储和 key-value方式的存储,也就是Conllection和map两种
值存储又可以分为:
- List
- Set
而List又有常用的ArrayList和LinkedList ,那么两者有什么区别呢?
ArrayList和LinkedList 的区别
底层:
- ArrayList的底层使数组
- LinKedList的底层时链表
优点:
- ArrayList由于底层使用的是数组,所以查询特定的元素特别快
- LinKedList由于 底层使用的是链表,所以插入和删除特别快
缺点:
- 由于数组在内存中是一块连续的内存,如果插入或者删除,需要移动内存, 所以ArrayList在插入或删除会比较慢
- 链表不要求内存是连续的,插入时不需要移动内存,只需改变引用执行即可,所以LinKedList在插入或删除效率高,比较快
使用场景:
-
ArrayList:使用在查询比较多,删除或插入比较少
-
总结:
- ArrayList:由于底层是使用数组实现的,所以查询特定元素的时候速度比较快,但是在插入和删除的时候需要移动内存,所以插入和删除比较慢,建议使用在查询比较多,删除和插入少的场景。
- LinkedList:底层是由链表组成的,内存不是连续的,在插入和删除的时候不需要移动内存,所以效率比较高,但是查询的时候需要从头开始一个一个查找,造成查询比较慢,建议使用在查询比较少,删除和插入多的场景。