初谈Java集合

1.集合是什么?

简单来说,集合=数组+对数组的算法,一般在实际操作过程中,批量管理数组就是使用集合或者数组。

此外要注意的是:集合中存储的是引用类型,并且集合只保存每个元素对象的引用,而并非将元素对象本身存入集合中!因此导致,如果在集合之外修改集合中的元素,那么集合也会受影响。

    2.集合框架

 总的来说,集合框架包括三个方面:Collection、Iterator和泛型机制,详细见下图:

初谈Java集合_第1张图片

2.1 Collection

Collection接口——定义了集合必须实现的API标准

注意:Collection接口不能直接实例化,List和set也不能直接实例化,必须实例化接口的实现类,如List类型集合中,ArrayList类继承了List接口,可以直接实例化。

Collection接口中,操作集合的方法有:

addAll()——将一个集合中的元素添加到另一个集合中,即集合的拼接;

语法:boolean addAll(collection c)参数可以是基本类型,也可以是引用类

containsAll()——用于判断当前集合是否包括给定集合中所有的元素。

语法:boolean containsAll(collection 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结果是不相同的)






你可能感兴趣的:(Java修炼之道)