ArrayList和Linked的区别

ArrayList和Linked的区别

  1. 首先,底层数据结构不同,ArrayList底层是基于数组实现的,Linked底层是基于链表实现的
  2. 由于底层数据结构不同,所使用的场景也不同,ArrayList更是个随机查找,LinkedList更适合删除和添加,查询、添加、删除的时间复杂度不同
  3. 另外ArrayList和LinkedList都实现了List接口,但是LinkedList还额外实现的Deque接口,所以LinkedList还可以当做队列来使用

查询ArrayList和Linked的区别

ArrayList arrayList = new ArrayList();
LinkedList linkedList = new LinkedList();

//两个通过下标查询,但是通过下标查询也有一定区别
arrayList.get(1);
linkedList.get(1);
// arrayList底层是基于数组实现,可以通过下标直接获取,但是linkedList底层基于链表实现的,
//所以,LinkedList的get方法传入的下标是要通过遍历去查询下标

ArrayList和Linked的区别

所以在查询方面,ArrayList要比LinkedList更适合,但是LinkedList中有两个特殊的方法,**getFirst()getLast()**方法,获取第一个元素和最后一个元素,在LinkedList中有两个属性,一个是first一个是last,一直持续记录链表中的第一个元素和最后一个元素的位置

ArrayList和Linked的区别

添加

在添加方面ArrayList有两个添加的方法,add(元素)和add(下标,元素)

使用add(元素)方法添加,会直接添加到数组的最后一个位上

ArrayList和Linked的区别

当然,数组的添加可能会涉及到数组的扩容,如果不需要扩容,添加肯定是很快的,但是如果涉及到扩容,那么添加肯定涉及到扩容的一个成本的

使用add(index,element)方法去向指定位置添加元素,会涉及到数组的移动,比如我使用arrayList.add(1,2);方法,但是如果这个数组下标为1的地方有元素,那么我需要把原本位置的元素包括后面下标的元素,全部往后移动,然后将元素添加到这个位置

ArrayList和Linked的区别

而LinkedList的插入,也是同样的add(element)方法和add(index,element)方法

ArrayList和Linked的区别

而使用add(index,element)方法,会首先判断传入的下标是否跟集合大小相等,如果相等,直接将Node设置为最后一个元素,否则调用linkBefore()方法先遍历出下标指定位置上面原有的元素,如果指定下标数字比较大,那么遍历肯定是比较麻烦的

ArrayList和Linked的区别

单从插入来讲,区别并不是很大,效率视使用场景而定

上一篇:Spring Boot整合EasyPoi


下一篇:038_MySQL 表的操作