活动地址:CSDN21天学习挑战赛
集合大小不固定,可以动态变化,类型也可以选择不固定
集合只能存储引用类型的数据
Collection -> 接口
元素是有序的,有索引
List -> 接口
Set -> 接口
无序,不重复,无索引
HashSet --> LinkedHashSet
HashSet 无序, LinkedHashSet 有序
TreeSet
按照大小默认升序排序
Map
键值对
集合都是泛型的形式,可以在编译阶段约束集合只能操作某种数据类型
Collection<String> lists = new ArrayList<String>();
Collection<String> lists = new ArrayList<>();
// 泛型类型声明可以省略
集合和泛型只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象
存储基本数据类型: 使用包装类
Collection<Integer> lists = new ArrayList<>();
// Double
Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的

迭代器遍历
Iterator, 迭代器是集合专用的遍历方式

.next() 取出当前位置的元素,并指向下一个
Iterator<String> it = lists.iterator();
while(it.hasNext()){
String element = it.next();
System.out.println(element);
}
foreach遍历
for(元素数据类型 变量名 : 数组或者Collection集合){
// ...
}
可以遍历集合也可以遍历数组
lambda 表达式遍历
JDK 8 开始有lambda表达式

Collection<String>lists = new ArrayList<>();
lists.forEach(new Consumer<String>(){
@Override
public void accept(String s){
System.out.println(s);
}
});
lists.forEach(s->{ // 只有一条语句可以省略{}
System.out.println(s);
});
集合中存储的是元素对象的地址
平衡二叉树
在满足查找二叉树大大小规则下,让树尽可能矮小,提高查数据的性能
任意节点的左右两个子树的高度差不超过1
红黑树
自平衡的二叉查找树
ArrayList, LinkedList : 有序,可重复,有索引
List 集合特有方法

ArrayList 底层是基于数组实现的,查询元素快,增删相对较慢
第一次创建集合并添加第一个元素时,在底层创建一个默认长度为10的数组
List<String> list = new ArrayList();
LinkedList 底层是基于双链表实现的,查询元素慢,增删首尾元素很快
首尾操作特有API

格式: < 数据类型> 可以在编译阶段约束操作的数据类型
泛型只能支持引用数据类型
集合体系的全部接口和实现类都是支持泛型的使用
在编译阶段类型就能确定下来
类后面–> 泛型类
定义类的同时定义了泛型的类就是泛型类
修饰符 class 类名 < 泛型变量> {}
public class MyClass<T> {}
泛型变量T可以随便写为任意标识,常见: E T K V等
编译阶段可以指定数据类型
方法声明上 --> 泛型方法
自定义方法的同时定义了泛型的方法就是泛型方法
修饰符 < 泛型变量> 方法返回类型 方法名称(形参列表){}
public <T> void show(T t){}
接口后面 --> 泛型接口
修饰符 interface 接口名称 < 泛型变量> {}
public interface Data<E> {}
泛型接口可以让实现类选择当前功能需要操作的数据类型
实现类可以在实现接口的时候传入自己操作的数据类型,重写的方法都将是针对该类型的操作