集合是类,用来存储多个数据,有属性、方法
集合是一个可变数组,保存相同元素并且长度可变
1. 体系
(1)Collection:存储一个一个的值
Iterable:
Iterable<T> iterator()
返回一个组T类型的元素上进行迭代的迭代器
用来遍历元素的对象
Collection子接口:List、Set
List
特点:元素可重复,有序(有序号的),完全可以使用List替换数组
有序:放进去的顺序和拿出来的顺序是一样的
Set
特点:元素不可重复,无序(无序号的)
无序:放进去的顺序和拿出来的顺序不一样
Queue:队列(会和线程公用,暂时不掌握)
(2)Map:存储一对一对的值,键值对(key-value)
泛型
只能是引用类型
可以把数据类型变量化
可以根据需要指定类型
a.可以在类上加泛型,整个类都可以用,在创建对象时指定类型
可以限定泛型的类型:
T extends 父类:向下限定
T super:向下限定
b.对于静态方法,可以在方法上加泛型
访问修饰符<泛型列表> 返回值类型 方法名(参数列表){
实现代码
}
2. ArrayList
使用语法:ArrayList<引用数据类型> arrayList=new ArrayList<>();
常用方法:
3. 遍历集合(List的遍历)
方法一:for循环
for(int i=0;i<array.size();i++){
system.out.printlt(array.get(i));
}
方法二:迭代器(必须掌握)
遍历数组尽量使用迭代器,因为靠谱
(1)迭代器相关方法API:
void |
forEachRemaining(Consumer<? super E> action) 对每个剩余元素执行给定的操作,直到所有元素都被处理或动作引发异常。 |
boolean |
hasNext() 如果迭代具有更多元素,则返回 true 。 |
next() 返回迭代中的下一个元素。 |
|
void |
remove() 从底层集合中删除此迭代器返回的最后一个元素(可选操作)。 |
(2)迭代器删除方法使用案例
方法三:foreach(增强for循环)
语法:for(元素类型 变量名:Collection集合){
system.out.printl(变量名);
}
Collection,数组都可以
实现Iterable接口的类可以成为foreach的目标
适用于做遍历输出
本质上:还是使用迭代器
4. ArrayList的排序
方法一:冒泡排序
方法二:Comparable比较接口
接口 Comparable<T>
参数类型:
T - 可以将此对象与之进行比较的对象类型
方法:
int compareTo(T o) :比较此对象与指定对象的顺序
o - 要比较的对象
返回:
负整数、零或正整数,根据此对象是小于、大于、等于指定对象
当前对象大于传入对象,返回正整数
当前对象等于传入对象,返回零
当前对象小于传入对象,返回负整数
一个类实现是这个接口,意味着可以通过int compareTo进行比较大小
借助Collections:工具类
short()方法:排序
总结:
1) 元素类实现Comparable接口,重写CompareTo方法
2) 利用Collection.short(List)排序
方法三:单独一个类实现Comparator接口,具备比较两个元素大小的方法
Comparator<T>:
int compare(T o1,T o2) 比较用来排序的两个参数
参数:o1---要比较的第一个对象
o2---要比较的第二个对象
返回:
根据第一个参数小于、等于、大于第二个参数分别返回负整数、零、正整数
1)定义类,实现Comparator的继承,重写Compare方法
2)实现排序
或者使用匿名内部类直接实现排序: