首页 > 编程语言 >Java集合之ArrayList和LinkedList

Java集合之ArrayList和LinkedList

时间:2022-11-28 11:01:12浏览次数:59  
标签:Node 初始化 Java LinkedList ArrayList 数组 集合

1 ArrayList和LinkedList

ArrayList和LinkedList是平常经常用到的两种集合

1.1 对于两者的底层

ArrayList的底层是使用的数组,而LinkedList的底层使用双向链表

 1 // ArrayList
 2 transient Object[] elementData;
 3 
 4 // LinkedList
 5 transient Node<E> first;
 6 transient Node<E> last;
 7 private static class Node<E> {
 8         E item;
 9         Node<E> next;
10         Node<E> prev;
11 
12         Node(Node<E> prev, E element, Node<E> next) {
13             this.item = element;
14             this.next = next;
15             this.prev = prev;
16         }
17     }

 

并且ArrayList实现了RandomAccess,所以其查找数据快,并且从尾部插入数据速度也不错。 而对于LinkedList,向其头部或尾部插入数据快,查找数据(get(index))时,会判断是从尾部还是头部开始查找,但是性能不如ArrayList。

 1.2 初始化数组

ArrayList分两种情况,分别是构造函数和添加元素中

构造函数中

ArrayList的构造函数可以无参、指定容量和传入集合。如果你指定了容量>0或者传入了非空集合,这时ArrayList会在执行构造函数时就将其底层数组初始化为你指定的容量或者集合的长度。否则,ArrayList会在你添加元素时再去初始化数组,也就我们所说的懒汉式。

添加元素有两种方法add和addAll(假设数组没有初始化)

add添加一个元素,会直接通过grow创建一个长度为10的数组用以初始化.而addAll传入集合时,如果集合长度小于10,则数组长度为10;否则,数组初始化长度为集合长度。

 对于LinkedList而言,不用过多说明。

ArrayList和LinkedList中用的多一点的是ArrayList,LinkedList由于实现了Deque接口,可以当作栈来使用。

1.3 有关两者的toString方法

实现如下代码

1 List<Integer> arrayList = Arrays.asList(1, 2, 3, 4);
2 System.out.println("arrayList = " + arrayList);
3 
4 LinkedList<Integer> linkedList = new LinkedList<>(arrayList);
5 System.out.println("linkedList = " + linkedList);

 

输出如下   两者都没有重写toString方法,最终调用的是AbstractCollection实现的toString。这方面的知识有关动态绑定,这里不过多赘述。    但是两者都有一个问题,线程不安全。这就需要说到CopyOnWriteArrayList 后面再具体讨论。

 

 

 

标签:Node,初始化,Java,LinkedList,ArrayList,数组,集合
From: https://www.cnblogs.com/lhbilibili/p/16899511.html

相关文章

  • Java数组排序
       今天,巩固教大家数组排序方法,我将介绍以下这几种方式:快速排序,冒泡排序,选择排序。1、快速排序这就是各位学Java的福利了,Java提供sort()方法,咱们只......
  • java利用递归实现扫雷
    package扫雷;importjava.math.*;importjava.util.Scanner;publicclass扫雷{//记录翻开次数staticintk=0;//两个数组......
  • 论Java的重要性
    最近,最新的世界编程语言排名最近出炉了,Java位居世界第一。    不仅如此,Java以17.856%超过第二名C语言的8.726%两倍以上,其实,这一现象是十分反常的,因为,在前几年,Java......
  • 大趋智能打印机java api
    对接飞鹅和易联云后,网上几乎没资料对大趋智能打印机javaapi分享,故此分享一波。官方文档地址SnParam.javapackagecom.shanheyongmu.openapi.param;importlombok......
  • 简单记录JAVA浮点类型判断BUG
    //0.3*1==0.3结果:trueSystem.out.println("0.3*1==0.3结果:"+(0.3*1==0.3));//0.1*3==0.3结果:falseSystem.out.println("0.......
  • java技术架构图
    架构图有哪几种  业务架构:需求初期业务的结果和过程描述一般比较模糊,可能来自于某个老板、运营或用户的反馈。客户说海尔洗衣机洗土豆会堵,海尔立马设计专门的土豆洗......
  • Java基础语法
          ......
  • java中String.intern()方法具有什么功能呢?
    下文笔者讲述java中String.intern()方法的功能简介说明,如下所示:String.intern原理String.intern():此方法是一个Native方法底层调用C++的StringTable::in......
  • Difference Between Method Overloading and Method Overriding in Java
    ThedifferencesbetweenMethodOverloadingandMethodOverridinginJavaareasfollows:MethodOverloading MethodOverridingMethodoverloadingis......
  • Java基础
    java基础java的基本程序设计结构第一个程序Main.javapublicclassMain{publicstaticvoidmain(String[]args){System.out.println("hello,world")......