Java如何封装JDK_java 中的JDK封装的数据结构和算法解析(集合类)----链表 List 之 LinkedList...

List 只要有两个实现类(ArrayList 和linkedList ),ArryList是基于数组实现,LinkedList是基于链表实现,下面是小弟对LinkedList的一点理解:

LinkedList :基于链表实现的集合

双链接列表实现{ @code  List}和{ @code   Deque} 接口。实现了所有可选列表操作,和许可元素(including{ @code  null})。

41d8f5b682bca8e6e045f4e63a0d3e1e.png

首先对实现的接口分析一下:

Deque  (双端队列): 这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图是其结构图

3bb8b45816eeff58b1afb38f797e985d.png

关于双向队列的跟详细的讲述:http://blog.sina.com.cn/s/blog_7768d2210101ajj6.html

数据结构:

节点Node数据结构:

其中包括 元素包括的下一个元素next和前一个元素prev和元素本身的数据item(可见元素的数据结构和C的一样,由此说明C/C++在java底层的作用)

7a7e43b770f94c0049ef9dfce5e8d927.png

队列的数据结构:

可见LinkedList的数据结构足够简单,一个头结点,尾节点,元素个数。(足可以说明双向队列在LinkedList中的应用)。

98a14cfba6f5bb4a7ca3a8b09f0c2cba.png

方法:

构造方法:无参构造,集合构造

285da5ed3c46bc63e2e39baca7de40b7.png

添加删除方法:

f56e30255a50f465e2e2f09d34b27071.png

添加方法:addFirst , addLast ,add (E e) ,add(index,e),其中

addFirst是将元素插入双链表的表头

addLast是将元素插入双链表的表尾

add (E e)也是默认插入双链表的表尾

add(index,e)是将元素插入索引为index的位置

70c412778c207337e1e6dab3c93ffb0a.png

d1aadaa47511f5d564b85ad36a9b0f89.png

1117856fe528ed12329623e860b641ff.png

cd09fcb01b1bd8a6e7cd396bf7ddd0e3.png

删除方法:removeFirst,removeLast ,remove (e) ,remove(index)

removeFirst删除第一个元素

removeLast删除最后一个元素

remove(e) 删除一个值为e的元素

remove(index) 删除一个索引为index的元素

a0b978b893045f1e08779e12b61dbe3c.png

734778092122a416f0f6cdff34e61021.png

24f59715aff201c1a66662469b8eb4e4.png 

25811f9a989f600f5616a127c3a18e39.png

修改方法:

set(int index, E element)  修改索引为index的元素的值

a5e0f07eebcc3433dedb89fe7ce7eb99.png

数据的实际操作方法:

可见都用到一个共同的方法linked前缀的方法,由此操作队列的数据方法由link开头。

cb50cfa7f5b93e91b5abf801629e635e.png

7f02478b6f7b408a8c9c43f191f4b3c3.png

70fcf1c7c089cc13aab05614f8854168.png

d716cfbc995c7ffb547c8223f510cfc5.png

ac63c32b2800a79c3f42262c93b92cda.png

ee1d13c50a2d2d8b665ec3b62ff74519.png

549c9ea5aeb6bdc3f968a451f3a2e03b.png

工具方法:

796871eb85b057882210a0f7769b5030.png

内部迭代方法:和ArrayList一样,LinkedList 也是用内部类的实现来迭代元素的输出(可以看到迭代在java中是一种思想)

816e64a9559e66dbd933d06e32d1e918.png

总结:

LinkedList是java对双链表的一种实现,定义了链表的双端操作。这种链表的集合有一个很好的优点:其可以实现元素的快速添加和删除。但也有一个很大的缺点:如果获取一个指定位置的元素,则要通过遍历的方式,这种方式十分低效率。所以在集合选取的时候也考虑此集合主要用于元素的查看和修改还是元素的增删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值