Java集合框架LinkedList详解及实例
Java集合框架LinkedList详解
LinkedList定义
packagejava.util; publicclassLinkedListextendsAbstractSequentialList implementsList ,Deque ,Cloneable,java.io.Serializable{ transientintsize=0; transientNode first; transientNode last; }
LinkedList概述
LinkedList以双向链表实现,允许重复。(如下Node的实现)并保留头指针和尾指针。
privatestaticclassNode{ Eitem; Node next; Node prev; Node(Node prev,Eelement,Node next){ this.item=element; this.next=next; this.prev=prev; } }
链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作。
按下标访问元素—get(i)/set(i,e)要悲剧的遍历链表将指针移动到位(如果i>数组大小的一半,会从末尾移起)。
publicEget(intindex){
checkElementIndex(index);
returnnode(index).item;
}
publicEset(intindex,Eelement){
checkElementIndex(index);
Nodex=node(index);
EoldVal=x.item;
x.item=element;
returnoldVal;
}
Nodenode(intindex){
//assertisElementIndex(index);
if(index<(size>>1)){
Nodex=first;
for(inti=0;ix=last;
for(inti=size-1;i>index;i--)
x=x.prev;
returnx;
}
}
插入、删除元素时修改前后节点的指针即可,但还是要遍历部分链表的指针才能移动到下标所指的位置,只有在链表两头的操作—add(),addFirst(),removeLast()或用iterator()上的remove()能省掉指针的移动。
非线程安全,可以调用Collections.synchronizedList(newLinkedList<>());实现。
LinkedList用法
简单举个例子:
Listlist=newLinkedList<>(); list.add(4); list.add(2); list.add(3); list.add(5); for(inti:list) System.out.println(i); System.out.println(list);
运行结果:
4 2 3 5 [4,2,3,5]
LinkedList会保留插入数据的顺序。
subList的使用
Listlist=newLinkedList<>(); 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 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中的值也会跟着改变。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!