数组结构和链表结构对比
2)链表结构查询慢,但是增删快;
List集合
|------LinkedList集合
LinkedList集合:它也是List接口的实现类,它的底层使用的链接列表(链表)数据结构。
链表结构的特点:有头有尾。
补充概念:什么是数据结构?
数据结构:数据的存储方式,不同的集合容器它们存储数据的方式都不一样。而我们学习众多的集合容器,重点是知道每个集合存储数据的方式即可。不同集合的存储方式不同,导致集合中的数据存取,以及元素能否重复等相关操作也都不相同。
LinkedList集合它采用的是数据结构中的链表结构:
链表结构:由一个链子把多个节点连接起来的数据结构。
节点:在链表结构中每个可以保存数据的空间称为节点,而一个链表结构是由多个节点组成的。
也就是说链表结构使用节点来存储数据。
每个节点(存储数据的空间)可以分成若干部分,其中有一部分存储数据,另外一部分存储的是其他节点的地址。
说明:
1)节点:实际存储自己的数据+其他节点的地址,而作为链表结构中的最后一个节点的存储地址的空间是null。
2)链表结构查询或遍历时都是从头到尾的遍历。
3)链表结构是有头有尾的。因此LinkedList集合中定义了自己的特有的方法都是围绕链表的头和尾设计的。
4)链表分为两种:单向链表和双向链表。
1、它的底层使用的链表结构;
2、有头有尾,其中的方法都是围绕头和尾设计的;
3、LinkedList集合可以根据头尾进行各种操作,但它的增删效率高,查询效率低;
LinkedList集合增删效率高是因为底层是链表结构,如果增加或者删除只需要在增加或者删除节点的位置上记住新的节点的地址即可,而其他节点不需要移动,所以速度会快。
而查询遍历由于链表结构的特点,查询只能从头一直遍历到链表的结尾,所以速度会慢。
4、LinkedList集合底层也是线程不安全。效率高;
5、也可以存储null元素;
由于LinkedList集合底层使用的链表结构:
导致LinkedList集合在存储数据的时候可以根据头和尾进行增、删、改、查各种操作。可以使用LinkedList集合模拟常见的2种数据结构:
队列结构:先进的先出或者后进的后出。(排队买票)
栈结构:先进的后出或者后进的先出。(手枪的弹夹)
经常使用LinkedList模拟上述的2种结构:
1)案例:使用LinkedList模拟队列结构 。先进的先出 (排队买票)
注意:队列的特点是获取一个元素便同时将获取的元素直接删除;
可以理解为一个人买票,买完票就不在队伍中了;
由于队列的特点,是先进先出,所以这里可以删除第一个元素,并返回删除的元素;