集合的概述
集合和数组的区别
1,数组的长度是不可变的,集合的长度是可变的。
2,数组可以存基本数据类型和引用数据类型。
集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类
集合的体系
单列集合
Collection 是 单列集合 的根接口。
Collection有两个重要的子接口,分别是List和Set接口
List接口下的集合特点:
Set接口下的集合特点:
List接口
List接口下的集合是有索引的,所以List接口在继承Collection方法的基础上,还提供一些特有的方法,可以通过索引操作集合元素。
List接口的常用方法
List
ArrayList的底层结构
ArrayList实现了List接口。
ArrayList:底层数据结构是数组,查询快,增删慢
ArrayList的底层源码分析
面试热点问题:
1.ArrayList底层是什么数据结构?
ArrayList底层是一个Object数组:
2.底层的数组何时创建,初始化长度是多少?
使用无参构造方法创建集合时,数组的初始长度为 0
使用带参构造方法创建集合时,数组长度由参数值指定。
3.首次调用add方法添加元素的时候,数组的长度变为多少?
如果初始化的数组长度为0,首次添加元素时,长度会扩容为10
4.如果添加的元素超过数组长度,怎么办?
数组会自动扩容,长度在原来的基础上增加一半。
>> 1相当于除以2
LinkedList集合
LinkedList的底层是一个双向链表,增删快,查询慢。
双向链表可以快速对首尾元素进行操作,所以LinkedList中有很多进行首尾操作的API。
LinkedList 集合的特有方法
Collections工具类
Collections 类在java.util包中,是一个操作集合的工具类。
Collections 类提供了许多操作集合的静态方法,可以实现集合元素的排序、批量添加,替换等操作。
常用方法
addAll(Collection
shuffle(List<?> list) 随机打乱list集合中元素的顺序。
sort(List
sort(List