集合和数组的对比小结
- 数组的长度是不可变的,集合的长度是可变的。
- 数组可以存储基本数据类型和引用数据类型。集合只能存储引用数据类型,如果需要存储基本数据类型,需要存对应的包装类。
集合类体系结构
蓝色表示接口,红色表示实现类
Collection集合概述和使用
collection概述:
- 是单列集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素。
- JDK不提供此接口的任何直接实现,他提供更具体的子接口 (如set和list)实现。
创建Collection集合的对象
- 多态方式
- 具体的实现类ArrayList
Collection集合常用方法
public static void main(String[] args) {
Collection<String> coll=new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
System.out.println(coll);//[aaa, bbb, ccc]
//清空
//coll.clear();
// 删除
coll.remove("aaa");
System.out.println(coll);//[bbb, ccc]
//判断是否存在"aaa"
boolean result = coll.contains("aaa");
System.out.println(result);//false
//判断集合是否为空
boolean result2 = coll.isEmpty();
System.out.println(result2);//false
//获取集合的长度
int size = coll.size();
System.out.println(size);//2
}
public static void main(String[] args) {
//创建集合的对象
Collection<Student> coll=new ArrayList<>();
//创建三个学生对象
Student s1 = new Student("zhangsan", 1);
Student s2 = new Student("lisi", 5);
Student s3 = new Student("wangwu", 44);
//把学生添加到集合中
coll.add(s1);
coll.add(s2);
coll.add(s3);
//判断集合中某一学生对象是否包含
Student s4 = new Student("lisi", 5);
//因为contains方法在底层依赖equals方法判断对象是否一致的。
//如果存在的是自定义对象,没有重写equals方法,那么默认使用Object类中的equals方法进行判断,而Object类中equals方法,依赖地址值进行判断
//如果同姓名同年龄就认为是同一学生
//只需要在student类中重写equals方法就可以了
System.out.println(coll.contains(s4));
}
Collection的遍历方式
迭代器遍历
迭代器在java中的类是iterator,迭代器是集合专用的遍历方式。
Collection集合获取迭代器
iterator中常用方法
public static void main(String[] args) {
//创建集合并添加元素
Collection<String>coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
//获取迭代器对象
Iterator<String> it = coll.iterator();
//利用集合获取集合每一个元素
while (it.hasNext()){
//next获取元素 并移动指针
String aut = it.next();
System.out.println(aut);
}
}
//删除
while (it.hasNext()){
String str = it.next();
if ("b".equals(str)){
it.remove();
}
}
System.out.println(coll);
}
细节注意点:
1.用next获取元素超出范围,会 报错NoSuchElementException
2.迭代器遍历完毕,指针不会复位
3.循环中只能用一次next方法
4.迭代器遍历时,不能用集合的方法进行增加或者删除
增强 for遍历
增强for的底层就是 迭代器,为了简化迭代器的代码书写的。
所有的单列集合和 数组才能用增强for进行遍历
格式:
for (元素的数据类型 变量名:数组或者集合){
}
快速生成方式:集合名字+for回车
for (String s : list){
sout(s);
}
public static void main(String[] args) {
//1.创建集合并添加元素
Collection<String> coll = new ArrayList<>();
coll.add("zhangsan");
coll.add("lisi");
coll.add("haha");
//2.利用 增强for进行 遍历
for (String s : coll) {
System.out.println(s);
}
}
增强for细节
修改增强for中的变量,不会改变集合中原本的数据。
Lambda表达式遍历
得益于JDK8开始的技术Lambda表达式,提供了一种 更简单,更直接的遍历集合的方式。
//Lambda表达式遍历
//1.利用匿名内部类
//底层原理
//其实也会自己遍历集合,依次得到每一个元素
//把得到的每一个元素,传递给下面的accept方法
//s依次表示集合中的每一个数据
coll.forEach(new Consumer<String>() {
@Override
//s依次表示集合中的每一个数据
public void accept(String s) {
System.out.println(s);
}
});
//lambda表达式
coll.forEach(s-> System.out.println(s));
}
总结
- Collection是单列集合的顶层接口,所有方法被List和Set系列集合共享
- 常见成员方法
add,clear,remove,contains,isEmpty,size - 三种通用的遍历方式:
迭代器iterator:在遍历的过程中需要删除元素,请使用迭代器。
增强for,Lambda:仅仅想遍历,那么使用增强for或Lambda表达式
lection是单列集合的顶层接口,所有方法被List和Set系列集合共享
2. 常见成员方法
add,clear,remove,contains,isEmpty,size
3. 三种通用的遍历方式:
迭代器iterator:在遍历的过程中需要删除元素,请使用迭代器。
增强for,Lambda:仅仅想遍历,那么使用增强for或Lambda表达式