Java之List集合的解析及泛型的概述

Java之List集合的解析及泛型的概述

4.List集合的实现类

4.1List集合子类的特点【记忆】

ArrayList集合

底层是数组结构实现,查询快、增删慢

LinkedList集合

底层是链表结构实现,查询慢、增删快

4.2LinkedList集合的特有功能【应用】

特有方法

方法名

说明

public void addFirst(E e)

在该列表开头插入指定的元素

public void addLast(E e)

将指定的元素追加到此列表的末尾

public E getFirst()

返回此列表中的第一个元素

public E getLast()

返回此列表中的最后一个元素

public E removeFirst()

从此列表中删除并返回第一个元素

public E removeLast()

从此列表中删除并返回最后一个元素

示例代码

public class MyLinkedListDemo4 {

public static void main(String[] args) {

LinkedList list = new LinkedList<>();

list.add("aaa");

list.add("bbb");

list.add("ccc");

// public void addFirst(E e) 在该列表开头插入指定的元素

//method1(list);

// public void addLast(E e) 将指定的元素追加到此列表的末尾

//method2(list);

// public E getFirst() 返回此列表中的第一个元素

// public E getLast() 返回此列表中的最后一个元素

//method3(list);

// public E removeFirst() 从此列表中删除并返回第一个元素

// public E removeLast() 从此列表中删除并返回最后一个元素

//method4(list);

}

private static void method4(LinkedList list) {

String first = list.removeFirst();

System.out.println(first);

String last = list.removeLast();

System.out.println(last);

System.out.println(list);

}

private static void method3(LinkedList list) {

String first = list.getFirst();

String last = list.getLast();

System.out.println(first);

System.out.println(last);

}

private static void method2(LinkedList list) {

list.addLast("www");

System.out.println(list);

}

private static void method1(LinkedList list) {

list.addFirst("qqq");

System.out.println(list);

}

}

5. 源码分析

5.1 ArrayList源码分析:

核心步骤:

创建ArrayList对象的时候,他在底层先创建了一个长度为0的数组。

数组名字:elementDate,定义变量size。

size这个变量有两层含义: ①:元素的个数,也就是集合的长度 ②:下一个元素的存入位置

添加元素,添加完毕后,size++

扩容时机一:

当存满时候,会创建一个新的数组,新数组的长度,是原来的1.5倍,也就是长度为15.再把所有的元素,全拷贝到新数组中。如果继续添加数据,这个长度为15的数组也满了,那么下次还会继续扩容,还是1.5倍。

扩容时机二:

一次性添加多个数据,扩容1.5倍不够,怎么办呀?

如果一次添加多个元素,1.5倍放不下,那么新创建数组的长度以实际为准。

举个例子: 在一开始,如果默认的长度为10的数组已经装满了,在装满的情况下,我一次性要添加100个数据很显然,10扩容1.5倍,变成15,还是不够,

怎么办?

此时新数组的长度,就以实际情况为准,就是110

添加一个元素时的扩容:

​编辑

添加多个元素时的扩容:

​编辑

5.2 LinkedList源码分析:

底层是双向链表结构

核心步骤如下:

刚开始创建的时候,底层创建了两个变量:一个记录头结点first,一个记录尾结点last,默认为null

添加第一个元素时,底层创建一个结点对象,first和last都记录这个结点的地址值

添加第二个元素时,底层创建一个结点对象,第一个结点会记录第二个结点的地址值,last会记录新结点的地址值

具体分析过程可以参见视频讲解。

​编辑

5.3 迭代器源码分析:

迭代器遍历相关的三个方法:

2.Set集合

Iterator iterator() :获取一个迭代器对象

boolean hasNext() :判断当前指向的位置是否有元素

E next() :获取当前指向的元素并移动指针

1.泛型 1.1泛型概述

泛型的介绍

泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制

泛型的好处

把运行时期的问题提前到了编译期间

避免了强制类型转换

泛型的定义格式

<类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如:

<类型1,类型2…>: 指定多种类型的格式,多种类型之间用逗号隔开.例如:

相关推荐

国际足联拟将世界杯扩军至64队:足球盛事开启全新时代
365上分客服微信号

国际足联拟将世界杯扩军至64队:足球盛事开启全新时代

📅 08-06 👁️ 8468
啤酒每瓶容量,一瓶啤酒有多少升?
365上分客服微信号

啤酒每瓶容量,一瓶啤酒有多少升?

📅 09-25 👁️ 4348
世界前十运输机排名,中国“胖妞”运-20排第六
365速发国际平台坑人

世界前十运输机排名,中国“胖妞”运-20排第六

📅 10-03 👁️ 5473
TBC怀旧服职业攻略 增强萨在P3粉橙心得
365上分客服微信号

TBC怀旧服职业攻略 增强萨在P3粉橙心得

📅 09-08 👁️ 290
将 iPhone 数据传输到笔记本电脑的 6 种最佳方法
365上分客服微信号

将 iPhone 数据传输到笔记本电脑的 6 种最佳方法

📅 12-18 👁️ 8709
穿越火线昵称突然被改了怎么回事
365速发国际平台坑人

穿越火线昵称突然被改了怎么回事

📅 12-31 👁️ 2424