java的linkedlist_跟我学java编程—掌握LinkedList的原理及应用

前面一节介绍了ArrayList,本节介绍LinkedList。LinkedList也是List接口的实现类,与ArrayList不同之处是采用的存储结构不同,ArrayList的数据结构为线性表,而LinkedList数据结构是链表。链表数据结构的特点是每个元素分配的空间不必连续、插入和删除元素时速度非常快、但访问元素的速度较慢。

LinkedList是一个双向链表, 当数据量很大或者操作很频繁的情况下,添加和删除元素时具有比ArrayList更好的性能。但在元素的查询和修改方面要弱于ArrayList。LinkedList类每个结点用内部类Node表示,LinkedList通过first和last引用分别指向链表的第一个和最后一个元素,当链表为空时,first和last都为NULL值。LinkedList数据结构如下图所示:

3b028098c409246da09e9bb6e5965714.png图 14-11 LinkedList数据结构

LinkedList类内部的Node结点代码如下:

9d1c7bdf58a5c6d3c246d03f454ac4cf.png

Node节点一共有三个属性:item代表节点值,prev代表节点的前一个节点,next代表节点的后一个节点。每个结点都有一个前驱和后继结点,并且在 LinkedList中也定义了两个变量分别指向链表中的第一个和最后一个结点。

transient Node first;

transient Node last;

1、添加元素到LinkedList

LinkedList提供了多个添加元素的方法:

●boolean add(E e)

在链表尾部添加一个元素,如果成功,返回true,否则返回false。

●void addFirst(E e)

在链表头部插入一个元素。

●addLast(E e)

在链表尾部添加一个元素。

●void add(int index, E element)

在指定位置插入一个元素。

添加元素到LinkedList示例代码如下:

7618f0c90fce99a04c5fe9ef679b29d4.png

代码通过add、addFirst、addLast方法加入元素,并通过println输出链表元素。输出结果如下图所示:

2172a5a6f879aba99f5e3e2d97aba60e.png图 14-12 LinkedListAddDemo输出结果

2、从LinkedList中删除元素

LinkedList提供了多个删除元素的方法:

●boolean remove(Object o)

从当前链表中移除指定的元素。

● E remove(int index)

从当前链表中移除指定位置的元素。

● E removeFirst()

从当前链表中移除第一个元素。

● E removeLast()

从当前链表中移除最后一个元素。

● E remove()

从当前链表中移除第一个元素,同removeLast()相同。

从LinkedList删除元素示例代码如下:

d91f6279c68dc85f95d156487a656804.png

代码通过add方法加入元素,再通过remove、removeFirst、removeLast等方法移除元素,并通过println输出操作后的链表元素。输出结果如下图所示:

3aab373afd298238e853824ef5ff95bd.png图 14-13 LinkedListRemoveDemo输出结

3、从LinkedList中获取元素

LinkedList提供了多个获取元素的方法:

● E get(int index)

从当前链表中获取指定位置的元素。

● E getFirst()

从当前链表中获取第一个元素。

● E getLast()

从当前链表中获取最后一个元素。

从LinkedList获取元素示例代码如下:

267be684ed256d9f5f61cb734d55b155.png

代码通过add方法加入元素,再通过get、getFirst、getLast方法获取元素,并通过println输出操作后的链表元素。输出结果如下图所示:

1d08d618fe101ed45765607202093ef5.png图 14-14 LinkedListGetDemo输出结果

4、LinkedList的遍历方法

同前面介绍的集合类遍历方式一样,LinkedList可以通过迭代器、foreach语句、for循环语句等方法遍历集合的所有元素。

遍历LinkedList元素示例代码如下:

16aade0114935784f02f67509db8c47e.png

代码采用for循环、迭代器、foreach方式,遍历包含10万个元素的LinkedList,通过输出结果可以看出,foreach语句效率最高,其次是迭代器,效率最差的是for循环。输出结果如下图所示:

78f56bcff68817bbab897f8adfa6e729.png图 14-15 LinkedListTraverseDemo输出

■ 知识点拨

LinkedList存储元素的数据结构是双向链表结构,由存储元素的结点连接而成,每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值