集合之List

集合之List

1.介绍

众所周知List,Set,MAp,前两个都是继承了Collection接口,Map为独立接口,这篇文章着重讲解List接口,的实现类和它们的特点及应用。

List的实现类有哪些?

​ 1.ArrayList

​ 2.Vectior

​ 3.LinkedList

在这里插入图片描述

2.ArrayList原理

概念

ArrayList底层是数组实现,ArrayList只不过是对数组的包装,因为数组在内存中分配时必须指定长度,

且一旦分配好后便无法再增加长度,ArrayList之所以可以一直往里添加,是因为它内部做了处理。存储

空间连续,当容量达到阈值时会进行自动扩容(数组当前足够的最小容量 * 1.5),当底层数组填满后,它会

再分配一个更大的新的数组,把原数组里的元素拷贝过来,然后把原数组抛弃掉。使用新的数组作为底

层数组来继续存储。

特点

1.查询快,增删慢,线程不安全,运行效率高。

2.可以储存任意类型的元素

3.元素有序,右下标,可重复

4.实现随机访问

3.LinkedList原理

概念

LinkedList底层是链表实现,长度不固定,因为内存空间的分配是由操作系统完成的,可以说每次分配的位

置都是随机的,并没有确定的规律。所以说链表的每个元素都在完全不同的内存地址,上一个元素除了存

储具体的数据之外,也存储一份下一个元素在内存中的地址,访问链表元素时,必须从头一个个遍历,而

且链表越长,位置越靠后,所需花费的时间就越长。所以按索引访问链表元素的时间复杂度就是O(n),

n为链表的长度。也说明了链表不支持随机访问。所以ArrayList就实现了RandomAccess(随机访问)

接口,而LInkedList就没有。

特点

1.查询慢,增删快

2.没有同步,线程不安全(可以通过Collections.synchronizedList()实现线程安全)

3.底层数据结构是链表

4.Vector

介绍

和ArrayList一样底层是数组实现,在多线程的情况下,线程是安全的,效率低,Vector出现与jdk1.0,继承了AbstractList类(继承后可以使用迭代器遍历),实现了RandomAccess(标记接口,标明实现该接口的list支持快速随机访问),cloneable接口(标识接口,合法调用clone方法),serializable(序列化标识接口)。

特点

1.数组实现。

2.可以随机访问。

3.线程安全,效率低。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章