【第 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
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
3月前
|
Java 程序员
Java集合框架:List、Set、Map类型及泛型详解
Java集合框架:List、Set、Map类型及泛型详解
|
1月前
|
存储 安全 Java
Python教程第3章 | 集合(List列表、Tuple元组、Dict字典、Set)
Python 列表、无序列表、字典、元组增删改查基本用法和注意事项
50 1
|
1月前
|
存储 安全 Java
【Java】集合(一)单列集合List
【Java】集合(一)单列集合List
22 0
|
2月前
|
存储 安全 Java
深入解析Java List接口及其实现类
深入解析Java List接口及其实现类
|
2月前
|
Java
Java对list集合元素进行排序的几种方式
Java对list集合元素进行排序的几种方式
22 0
|
2月前
|
存储 Java 索引
java list集合相关介绍和方法使用操作
java list集合相关介绍和方法使用操作
29 1
|
3月前
|
存储 Java 索引
从零开始学习 Java:简单易懂的入门指南之Collection集合及list集合(二十一)
从零开始学习 Java:简单易懂的入门指南之Collection集合及list集合(二十一)
|
3月前
|
Java
java 读取csv到list,再将list集合数据写入新的csv文件中
java 读取csv到list,再将list集合数据写入新的csv文件中
|
3月前
|
存储 安全 算法
【深入探究Java集合框架】从List到Map的完整指南
【深入探究Java集合框架】从List到Map的完整指南