1.集合是什么?
简单来说,集合=数组+对数组的算法,一般在实际操作过程中,批量管理数组就是使用集合或者数组。
此外要注意的是:集合中存储的是引用类型,并且集合只保存每个元素对象的引用,而并非将元素对象本身存入集合中!因此导致,如果在集合之外修改集合中的元素,那么集合也会受影响。
2.集合框架
总的来说,集合框架包括三个方面:Collection、Iterator和泛型机制,详细见下图:
2.1 Collection
Collection接口——定义了集合必须实现的API标准
注意:Collection接口不能直接实例化,List和set也不能直接实例化,必须实例化接口的实现类,如List类型集合中,ArrayList类继承了List接口,可以直接实例化。
Collection接口中,操作集合的方法有:
addAll()——将一个集合中的元素添加到另一个集合中,即集合的拼接;
语法:boolean addAll(collection<? extends E> c)参数可以是基本类型,也可以是引用类
containsAll()——用于判断当前集合是否包括给定集合中所有的元素。
语法:boolean containsAll(collection<? extends E> c)
其核心就是一个对象与集合中每个对象做equals方法,例如:用于员工信息的比较
Emps.add(new Emp("Cecilia",8000));
System.out.println(emps.contains(new Emp("Cecilia",8000))?"已存在":"不存在")。
输出结果为:不存在,其中的原因在于:由于new一个对象,即使内容相同,但是重新创建了地址,实质这就是浅拷贝的含义,因此输出结果还是不存在。
注意:只要是自定义类型复杂对象时,就一定要重写equals方法
自定义类型对象比较的思路:
第一步:判断obj是否为null,如果为null,则直接返回;
第二步:判断obj和this师傅为同一对象,如果是。则返回true;
第三步:判断obj是否为当前类型;
第四步:最后,先类型转换,再自定义核心比较逻辑;
例如以下查询员工信息的代码:
Boolean equals(Object obj){
if(obj=null){
return false;
}else if(obj==this){
return true;
}else if(!obj instanceof Emp){
return false;
}else{
Emp emp=(Emp)obj;
return this.name.equals(emp.name)&&this.salary.equals.(emp.salary);
}
}3.操作集合的方法还有:
.size()——返回当前集合的元素总数
.clear()——清空当前集合元素
boolean isEmpty()——判断当前集合是否为空
4.批量处理集合中的元素的操作方法
addAll()——两个集合的拼接,直接修改一个集合的元素,不会创建新的集合对象
containsAll()——批量判断
retainsAll()——获得两个集合的交集,即除去不同的元素
removeAll()——获得两个集合的差集,即除去相同的元素(此处要注意集合A-集合B和集合B-集合A结果是不相同的)