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中的值也会跟着改变。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Java
# LinkedList
# LinkedList详解
# LinkedList用法
# Java集合框架之Stack Queue Deque使用详解刨析
# Java集合框架入门之泛型和包装类
# Java 集合框架之List 的使用(附小游戏练习)
# Java集合框架超详细小结
# Java基础之集合框架详解
# 简单了解java集合框架LinkedList使用方法
# Java集合框架之List ArrayList LinkedList使用详解刨析
# 链表
# 遍历
# 也会
# 希望能
# 按下
# 谢谢大家
# 或用
# 举个例子
# 使用了
# transient
# io
# Serializable
# Deque
# Cloneable
# private
# static
# item
# int
# size
# Node
相关文章:
如何批量查询域名的建站时间记录?
个人网站制作流程图片大全,个人网站如何注销?
如何在景安云服务器上绑定域名并配置虚拟主机?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
如何在云主机上快速搭建网站?
建站之星安装失败:服务器环境不兼容?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何在阿里云部署织梦网站?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何在新浪SAE免费搭建个人博客?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何通过NAT技术实现内网高效建站?
如何选择适配移动端的WAP自助建站平台?
如何选择服务器才能高效搭建专属网站?
北京网站制作的公司有哪些,北京白云观官方网站?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何用5美元大硬盘VPS安全高效搭建个人网站?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
c# Task.ConfigureAwait(true) 在什么场景下是必须的
Android使用GridView实现日历的简单功能
如何选择高效响应式自助建站源码系统?
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何在服务器上三步完成建站并提升流量?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
建站主机选哪种环境更利于SEO优化?
制作证书网站有哪些,全国城建培训中心证书查询官网?
太原网站制作公司有哪些,网约车营运证查询官网?
兔展官网 在线制作,怎样制作微信请帖?
临沂网站制作企业,临沂第三中学官方网站?
b2c电商网站制作流程,b2c水平综合的电商平台?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
IOS倒计时设置UIButton标题title的抖动问题
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
实例解析angularjs的filter过滤器
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
如何在IIS中新建站点并解决端口绑定冲突?
建站之星上传入口如何快速找到?
如何制作一个表白网站视频,关于勇敢表白的小标题?
深圳网站制作案例,网页的相关名词有哪些?
股票网站制作软件,网上股票怎么开户?
高防服务器如何保障网站安全无虞?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
*请认真填写需求信息,我们会在24小时内与您取得联系。