【第 18 个代码模型】List 集合接口(LinkedList 子类)|学习笔记

简介: 快速学习 【第 18 个代码模型】List 集合接口(LinkedList 子类)

开发者学堂课程【【名师课堂】Java 高级开发【第 18 个代码模型】List 集合接口(LinkedList 子类)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/372/detail/4662


【第 18 个代码模型】List 集合接口(LinkedList 子类)


LinkList 子类(5%)

1、 首先来观察一下 ArrayList 类的核心代码:

2、 LinkedList:

3、 总结:

 

在 List 接口里面还有一个令 LinkedList 子类,这个子类如果向父类接口转型的话,使用的形式和之前没有任何的区别。

如下所示

package cn.mldn.demo;

import java.util. LinkedList;

import java.util.List;

public class TestDemo {

public static void main(String[] args) throws Exception {

List<String> all= new LinkedList<String>() ;

all.add("Hello") ;

all.add("Hello") ;

all.add("World") ;

all.remove("Hello") ;

System.out.println(all);

}

}

结果出来一模一样

 

面试题:

请解释 ArrayList 与 LinkedList 区别?

首先来观察一下 ArrayList 类的核心代码

可以发现 ArrayList 里面存放的是数组,如果在实例化此类对象的时候确认传入了数组的大小,则里面保存的数组就会开辟一个定长的数组。但是如果后面再进行数据保存的时候发现数组的个数不够了,那么会进行数组的动态扩充。

所以很明显在实际的开发之中,如果要使用 ArrayList,最好的方法就是设置初始化的大小(分页程序为例,每次只会取出指定行的内容)。

构造方法:

public ArrayList() {

this.elementData = DEFAUL TCAPACITY_ EMPTY_ EL EMENTDATA;

}

常量:

privatestaticfinal Object[]DEFAULTCAPACITY_EmPTY_ELEMENTDATA={};

public class TestDemo {

public static void main(String[] args) throws Exception {

List<String>all= new ArrayList<string>(2) ;

all.add("Hello") ;

all.add("Hello") ;

all.add("World") ;

System.out.println(all);

System.out.println(Math.max(10, 20));

}

}

如果初始化的常数大于零,new Obiect 初始化常数,还入了一个大小过去,那么它的数组大小就是由外部决定,如果没有传入大小就是默认一个数组。

LinkedList:

是一个纯粹的链表实现,与之前编写的链表程序的实现完全一样(我们的性能高)

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;

}

}

Node 前后的节点,这是一个真正的链表实现。

总结:

ArrayList 封装的是一个数组,LinkedList 封装的是一个链表实现,ArrayList 时间复杂度为 1,而 LinkedList 时间复杂度为 n。

总结:

开发之中考虑的就是 ArrayList,如果要考虑性能,一定要传入初始化大小。

相关文章
|
1月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
109 4
|
4月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
198 1
|
4月前
|
存储 安全 Java
Java 学习路线 35 掌握 List 集合从入门到精通的 List 集合核心知识
本文详细解析Java中List集合的原理、常用实现类(如ArrayList、LinkedList)、核心方法及遍历方式,并结合数据去重、排序等实际应用场景,帮助开发者掌握List在不同业务场景下的高效使用,提升Java编程能力。
363 0
|
8月前
|
机器学习/深度学习 文字识别 开发者
使用OCR库Pix2Text执行p2t.recognize()时出现list index out of range的错误信息(附有Pix2Text识别图片内容和laTex公式的代码)
有时候报错并不是你代码有问题,源码出错也是很常见的情况,比如之前使用mxgraph也出现了不知名bug,最后也是修改的源码解决的。有疑问欢迎交流~ 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
263 5
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
122 3
|
12月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
232 0
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
120 3
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1327 1
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。

热门文章

最新文章