java 中的JDK封装的数据结构和算法解析(集合类)----链表 List 之 LinkedList
List 只要有两个实现类(ArrayList 和linkedList ),ArryList是基于数组实现,LinkedList是基于链表实现,下面是小弟对LinkedList的一点理解:
LinkedList :基于链表实现的集合
双链接列表实现{ @code List}和{ @code Deque} 接口。实现了所有可选列表操作,和许可元素(including{ @code null})。
首先对实现的接口分析一下:
Deque (双端队列): 这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图是其结构图
关于双向队列的跟详细的讲述:http://blog.sina.com.cn/s/blog_7768d2210101ajj6.html
数据结构:
节点Node数据结构:
其中包括 元素包括的下一个元素next和前一个元素prev和元素本身的数据item(可见元素的数据结构和C的一样,由此说明C/C++在java底层的作用)
队列的数据结构:
可见LinkedList的数据结构足够简单,一个头结点,尾节点,元素个数。(足可以说明双向队列在LinkedList中的应用)。
方法:
构造方法:无参构造,集合构造
添加删除方法:
添加方法:addFirst , addLast ,add (E e) ,add(index,e),其中
addFirst是将元素插入双链表的表头
addLast是将元素插入双链表的表尾
add (E e)也是默认插入双链表的表尾
add(index,e)是将元素插入索引为index的位置
删除方法:removeFirst,removeLast ,remove (e) ,remove(index)
removeFirst删除第一个元素
removeLast删除最后一个元素
remove(e) 删除一个值为e的元素
remove(index) 删除一个索引为index的元素
修改方法:
set(int index, E element) 修改索引为index的元素的值
数据的实际操作方法:
可见都用到一个共同的方法linked前缀的方法,由此操作队列的数据方法由link开头。
工具方法:
内部迭代方法:和ArrayList一样,LinkedList 也是用内部类的实现来迭代元素的输出(可以看到迭代在java中是一种思想)
总结:
LinkedList是java对双链表的一种实现,定义了链表的双端操作。这种链表的集合有一个很好的优点:其可以实现元素的快速添加和删除。但也有一个很大的缺点:如果获取一个指定位置的元素,则要通过遍历的方式,这种方式十分低效率。所以在集合选取的时候也考虑此集合主要用于元素的查看和修改还是元素的增删。