【第 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,如果要考虑性能,一定要传入初始化大小。

相关文章
|
3月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
72 5
|
2月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
50 0
|
3月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
34 3
|
4月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
26 3
|
4月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
5月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
49 5
|
4月前
|
Java API 开发者
代码小妙招:用Java轻松获取List交集数据
在Java中获取两个 `List`的交集可以通过 `retainAll`方法和Java 8引入的流操作来实现。使用 `retainAll`方法更为直接,但会修改原始 `List`的内容。而使用流则提供了不修改原始 `List`、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。
110 1
|
7月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1070 1
|
6月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
|
6月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。