多平台统一管理软件接口,如何实现多平台统一管理软件接口
192
2023-05-25
Java集合框架LinkedList详解及实例
java集合框架LinkedList详解
LinkedList定义
package java.util;
public class LinkedList
extends AbstractSequentialList
implements List
transient int size = 0;
transient Node
transient Node
}
LinkedList概述
LinkedList以双向链表实现,允许重复。(YSMAv如下Node的实现)并保留头指针和尾指针。
private static class Node
E item;
Node
Node
Node(Node
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 oldVal = x.item;
x.item = element;
return oldVal;
}
Node
// assert isElementIndex(index);
if (index < (sizhttp://e >> 1)) {
Node
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
插入、删除元素时修改前后节点的指针即可,但还是要遍历部分链表的指针才能移动到下标所指的位置,只有在链表两头的操作—add(), addFirst(),removeLast()或用iterator()上的remove()能省掉指针的移动。
非线程安全,可以调用Collections.synchronizedList(new LinkedList<>());实现。
LinkedList用法
简单举个例子:
List
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
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
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,内部引用的还是原来的链表,如果http://改变subList中的值,主list中的值也会跟着改变。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~