集合是什么
集合是放数据对象引用的容器
集合类存放的都是对象的引用,不是对象本身
主要的集合类型:List、Set、Map
集合和数组的区别
数组:固定长度
可以存储基本数据类型和引用数据类型
存储的元素必须是同一个数据类型
集合:可变长度
只能存储引用数据类型
存储的对象可以是不同数据类型
集合类的构成
所有集合框架的父接口:Map接口、Collection接口
Collection接口的子接口:Set接口、List接口
Set接口的实现类:HashSet:基于 HashMap,底层采用 HashMap 来保存元素
TreeSet:红黑树
LinkedHashSet:LinkedHashSet 继承了HashSet,其内部是通过 LinkedHashMap来实现
List接口的实现类:ArrayList:Object数组
LinkedList:双向循环链表
Vector:Object数组
Map接口的实现类:HashMap:(JDK1.8之前)由数组+链表组成
(JDK1.8之后)当链表长度大于阈值(默认为8)时,会
将链表转化为红黑树,用来减少搜索时间
TreeMap:红黑树
Hashtable:数组+链表
ConcurrentHashMap:继承自 HashMap,在HashMap基础上,增加
了一条双向链表
Collection接口
List接口特点
顺序存储、允许重复值
Set接口特点
无序存储、不允许重复值
Map接口特点
以键值对存储数据
元素存储循序是无须的
不允许出现重复键
ArrayList 与LinkedList区别
ArrayList与LinkedList 都实现了 List 接口。
ArrayList是线性表,底层是使用数组实现的, 它在尾端插入和访问数据时效率较高,
Linked 是双向链表, 他在中间插入或者头部插入时效率较高,在访问数据时效率较低
Array与 ArrayList区别
Array 与 ArrayList 都是用来存储数据的集合
ArrayList 是 Array的一个升级版
ArrayList 底层是使用数组实现的, 但是arrayList对数组进行了封装和功能扩展,拥有许多原生数组没有的一些功能
线程安全的集合类
Vector、hashTable、ConcurrentHashMap
遍历List集合的方式
for 循环遍历、迭代器遍历(Iterator)、foreach 循环遍历
迭代器 Iterator
Iterator 接口提供遍历任何 Collection 的接口
Collection可以使用迭代器方法来获取迭代器实例
所有Collection接继承了Iterator迭代器
Iterator的使用
//定义一个集合
List<String> list = new ArrayList<>();
//使用iterator
Iterator<String> i= list.iterator();
//while循环输出iterator迭代的元素
while(i.hasNext()){
String obj = it.next();
System.out.println(obj);
}