当前位置: 移动技术网 > IT编程>开发语言>Java > Java集合框架LinkedList详解及实例

Java集合框架LinkedList详解及实例

2019年07月22日  | 移动技术网IT编程  | 我要评论

java集合框架linkedlist详解

linkedlist定义

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中的值也会跟着改变。

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网