集合的概述

集合和数组的区别

1,数组的长度是不可变的,集合的长度是可变的。
2,数组可以存基本数据类型和引用数据类型。
集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类

集合的体系

image.png

单列集合

Collection 是 单列集合 的根接口。
Collection有两个重要的子接口,分别是ListSet接口
image.png

List接口下的集合特点:

1.有索引
2.元素可以重复
3.存入和取出顺序一致

Set接口下的集合特点:

1.没有索引
2.元素不可以重复
3.存入和取出顺序不一致

List接口

List接口下的集合是有索引的,所以List接口在继承Collection方法的基础上,还提供一些特有的方法,可以通过索引操作集合元素。

List接口的常用方法

image.png

List

ArrayList的底层结构

ArrayList实现了List接口。
ArrayList:底层数据结构是数组,查询快,增删慢

ArrayList的底层源码分析

面试热点问题:

1.ArrayList底层是什么数据结构?
ArrayList底层是一个Object数组:image.png
2.底层的数组何时创建,初始化长度是多少?
使用无参构造方法创建集合时,数组的初始长度为 0
使用带参构造方法创建集合时,数组长度由参数值指定。
3.首次调用add方法添加元素的时候,数组的长度变为多少?
如果初始化的数组长度为0,首次添加元素时,长度会扩容为10
4.如果添加的元素超过数组长度,怎么办?
数组会自动扩容,长度在原来的基础上增加一半image.png
>> 1相当于除以2

image.png

LinkedList集合

LinkedList的底层是一个双向链表,增删快,查询慢。
双向链表可以快速对首尾元素进行操作,所以LinkedList中有很多进行首尾操作的API。
image.png

LinkedList 集合的特有方法

image.png

Collections工具类

Collections 类在java.util包中,是一个操作集合的工具类。
Collections 类提供了许多操作集合的静态方法,可以实现集合元素的排序、批量添加,替换等操作。

常用方法

addAll(Collection c, T… elements) 将所有指定的元素添加到指定的集合c中。
shuffle(List<?> list) 随机打乱list集合中元素的顺序。
sort(List list) 根据自然顺序对list集合的元素进行升序排序。
sort(List list, Comparator c) 根据指定的比较器,对list集合元素进行自定义排序