Java集合框架LinkedList详解及实例
2017-04-08 14:30
751 查看
package java.util; public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{ transient int size = 0; transient Node<E> first; transient Node<E> last; }
LinkedList概述
LinkedList以双向链表实现,允许重复。(如下Node的实现)并保留头指针和尾指针。
private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作。
按下标访问元素―get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i>数组大小的一半,会从末尾移起)。
public E get(int index) { checkElementIndex(index); return node(index).item; } public E set(int index, E element) { checkElementIndex(index); Node<E> x = node(index); E oldVal = x.item; x.item = element; return oldVal; } Node<E> node(int index) { // assert isElementIndex(index); if (index < (size >> 1)) { Node<E> x = first; for (int i = 0; i < index; i++) x = x.next; return x; } else { Node<E> x = last; for (int i = size - 1; i > index; i--) x = x.prev; return x; } }
插入、删除元素时修改前后节点的指针即可,但还是要遍历部分链表的指针才能移动到下标所指的位置,只有在链表两头的操作―add(), addFirst(),removeLast()或用iterator()上的remove()能省掉指针的移动。
非线程安全,可以调用Collections.synchronizedList(new LinkedList<>());实现。
LinkedList用法
简单举个例子:
List<Integer> list = new LinkedList<>(); list.add(4); list.add(2); list.add(3); list.add(5); for(int i:list) System.out.println(i); System.out.println(list);
运行结果:
4 2 3 5 [4, 2, 3, 5]
LinkedList会保留插入数据的顺序。
subList的使用
List<Integer> list = new LinkedList<>(); list.add(4); list.add(2); list.add(3); list.add(5); list.add(7); list.add(5); list.add(11); list.add(14); list.add(10); list.add(9); System.out.println(list); List<Integer> list2 = list.subList(3, 6); System.out.println(list2); list2.set(2, 50); System.out.println("============"); System.out.println(list); System.out.println(list2);
运行结果:
[4, 2, 3, 5, 7, 5, 11, 14, 10, 9] [5, 7, 5] ============ [4, 2, 3, 5, 7, 50, 11, 14, 10, 9] [5, 7, 50]
调用LinkedList中的subList方法生成的新的list,内部引用的还是原来的链表,如果改变subList中的值,主list中的值也会跟着改变。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:
- JAVA LinkedList和ArrayList的使用及性能分析
- 解析Java中的队列和用LinkedList集合模拟队列的方法
- 浅谈 java中ArrayList、Vector、LinkedList的区别联系
- 如何实现Java中一个简单的LinkedList
- 分析Java中ArrayList与LinkedList列表结构的源码
- java LinkedList类详解及实例代码
- Java中ArrayList和LinkedList的遍历与性能分析
- Java中LinkedList详解和使用示例_动力节点Java学院整理
- java LinkedList源码详解及实例
- Java集合系列之LinkedList源码分析
相关文章推荐
- 详解怎样使用Axis开发Web Service的实例
- Java使用AES加密和解密的实例详解
- 关于J2EE层次设计架构实例的分析详解
- ASP调用sql server 存储过程详解-附带实例-
- Windows常用网络命令及命令实例详解(上)
- 《Atlas技术详解与应用实例》内容介绍
- JVM的垃圾回收机制详解和调优-附PDM应用实例
- Apache+Tomcat负载平衡设置实例详解 (1)
- 系统应用:Windows的故障恢复控制台应用实例详解
- 短消息数据实例详解
- JDOM使用详解及实例
- 通过JDBC操作ORACLE数据库实例详解
- Ajax的无刷新技术实例详解
- jdom使用详解及实例
- 通过JDBC操作ORACLE数据库实例详解(最常用操作)
- 通过JDBC操作ORACLE数据库实例详解(最常用操作)
- 跨进Java的门票 - 实例详解classpath及package
- 一个简单的SWT程序实例及详解
- Windows常用网络命令及命令实例详解(上)
- PHP文件上传实例详解!!!