重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Java集合框架LinkedList详解
成都创新互联是专业的双桥网站建设公司,双桥接单;提供成都网站设计、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行双桥网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
LinkedList定义
package java.util; public class LinkedListextends AbstractSequentialList implements List , Deque , Cloneable, java.io.Serializable{ transient int size = 0; transient Node first; transient Node last; }
LinkedList概述
LinkedList以双向链表实现,允许重复。(如下Node的实现)并保留头指针和尾指针。
private static class Node{ E item; Node next; Node prev; Node(Node prev, E element, Node 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); Nodex = node(index); E oldVal = x.item; x.item = element; return oldVal; } Node node(int index) { // assert isElementIndex(index); if (index < (size >> 1)) { Node x = first; for (int i = 0; i < index; i++) x = x.next; return x; } else { Node 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用法
简单举个例子:
Listlist = 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的使用
Listlist = 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 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中的值也会跟着改变。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!