admin 管理员组

文章数量: 887629


2024年1月11日发(作者:header 10是什么元件)

list 底层原理

List 是 Java 集合框架中非常重要的一个接口,是一个有序的

Collection,可以存储重复的元素对象。对于很多开发者来说,List 的使用是非常频繁的。然而,从应用角度去使用比较容易,但是如果想要真正深入理解 List 的底层原理和实现,就需要掌握一些相关的知识点。

1. List 接口的实现

List 接口的实现主要有两种方式:数组和链表。数组是一种连续的存储方式,可以通过下标的方式快速访问元素;链表是一种非连续的存储方式,它通过指针相互连接来实现元素之间的关系。

2. 数组实现 List

数组实现 List 的优点是访问速度非常快,缺点是插入和删除元素的速度较慢。当需要在数组中间插入或删除一个元素时,需要将插入或删除点之后的所有元素都向后或向前移动一个位置,这个过程比较费时。

Java 数组实现 List 的方式是通过一个 Object 类型的数组来存储元素。Java 数组的特点是在创建时指定长度,这也就意味着在使用过程中长

度是不变的,因此在进行插入或删除操作时,需要重新创建一个新的数组,并将原来的元素复制到新数组中,这个过程是非常耗性能的。

3. 链表实现 List

链表实现 List 的主要优点是插入和删除元素的速度很快,缺点是访问元素的速度较慢。链表的方式是通过一个节点类来存储元素,每个节点中都包含一个指向下一个节点的指针。

Java 链表实现 List 的方式是通过一个 Node 类来存储元素,每个

Node 对象包含一个存储元素的字段和一个指向下一个 Node 对象的指针。当需要插入或删除某个元素时,只需要修改相应的指针即可,这个过程是非常快的。

4. ArrayList 的底层实现

ArrayList 是 Java 中最常用的 List 实现类之一,它使用数组来存储元素,提高了访问元素的速度。当数组中的元素数量超过了数组长度时,ArrayList 会创建一个新的数组,将原有的元素复制到新数组中,这个过程叫做扩容。

ArrayList 的扩容方式是非常有意思的,它采用了一种类似于指数级别的扩容方式来避免频繁的扩容操作。当数组大小不够用时,ArrayList

会将数组长度扩大到目前的 1.5 倍,而不是每次只增加一个固定的长度。

5. LinkedList 的底层实现

LinkedList 是 Java 集合框架中的另一个 List 实现类,它使用链表实现元素的存储和访问。当需要访问某个元素时,LinkedList 会从头节点开始依次遍历链表,直到找到目标元素。因此,LinkedList 的访问操作比较慢。

LinkedList 在进行插入和删除操作时非常快,因为只需要修改相应的指针即可。如果需要在链表中间插入一个元素,只需要修改当前元素的前继节点和后继节点的指针即可,这个过程是非常快的。

总结

List 接口是 Java 集合框架中非常重要的一个接口,它提供了一种保存有序元素的方式。List 的底层实现有两种方式:数组和链表。数组实现 List 的优点是访问速度非常快,缺点是插入和删除元素的速度较慢;链表实现 List 的主要优点是插入和删除元素的速度很快,缺点是访问元素的速度较慢。ArrayList 和 LinkedList 是 List 接口的两个最常用的实现类,它们各有优缺点,开发者需要根据具体业务场景选择合适的实现类。


本文标签: 元素 数组 需要 实现 链表