栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Collection接口中的常用方法二[java]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Collection接口中的常用方法二[java]

Collection接口中的常用方法二
  1. contain(Object obj);

这个方法判断的是我们的调用这个方法的集合是不是包含了我们的obj对象,如果是包含了的话我们这里就是会返回一个true,如果是没有包含我们的obj对象的话,这个时候就会返回一个false

  • 那么这个方法如何判断我们的这个集合中是不是包含了我们的obj对象?----这个在contain()方法的底层可以发现.我们的contain()方法在底层的代码中是调用了对象obj的equals()方法和我们的集合中的每一个元素进行了比较,也就是我们的这个对象包不包含在我们的这个集合中我们是要通过我们传入的对象obj的模板类中的equals()方法去判断到底包不包含
    • 这里其实我们也就知道了,如果参数对象的模板类中重写了equals()方法,那么我们的比较的就是内容相不相同,如果我们的参数对象对象创建的模板类中的equals()方法没有进行重写,这个时候我们比较的就是我们的集合中的元素和我们的obj对象的地址相不相同
也就是我们的contains()方法判断包不包含时是通过看参数对象的模板类中有没有重写equals()方法判断的
  • 参数对象的模板类中重写了equals()方法,就会调用我们参数对象的重写后的equals()方法去和我们的集合中的每个元素去比较,如果我们重写后equals()方法判断相等了,这个时候我们的contains()方法就返回一个true,也就表示包含
  • 参数对象的模板类中没有重写equals()方法,这个时候就是调用我们参数对象从Object类中继承下来的equals()方法(而我们Object类中的equals()方法是通过==来实现的,比较的使我们两个对象的地址是否相同),那么这个时候就是使用我们的参数对象调用继承了Object类中的equals()方法去一个一个和我们的集合中的元素进行比较,如果判断出集合中有元素和我们的参数对象相同的话,这个时候我们也是返回一个true,如果遍历完集合之后都没有和我们的参数对象相同的元素,这个时候就返回一个false

这里我们举一个具体的例子

eg:

  • 这个例子中我们的Dog类中没有重写equals()方法,也就是比较的是内容
package 集合;


import java.util.Collection;
import java.util.ArrayList;

public class FangfaER {
    public static void main(String[] args) {
        Collection c1= new ArrayList();
        boolean b = c1.add(123);
        boolean b1 = c1.add("abc");
        boolean b2 = c1.add(new Dog());
        boolean b3 = c1.add(new Dog("二哈",12));
        Dog d = new Dog("小黑",1);
        boolean b4 = c1.add(d);
        
        System.out.println(c1.contains(123));
        
        System.out.println(c1.contains("abc"));
        
        System.out.println(c1.contains(new Dog()));
        
        System.out.println(c1.contains(new Dog("二哈", 12)));
        
        System.out.println(c1.contains(d));

    }
}
class Dog{
    private String name;
    private int age;

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Dog(){

    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}

  • 上面的最后一个比较中我们在集合中添加的和我们的contains()方法的参数是同一个对象,是同一个对象,这个时候我们的地址都是相同的,所以我们不管是Dog类中有没有重写我们的equals()方法,这个时候我们的这个输出结果都是true

eg:这里我们举一个例子

  • 这个例子中我们的Dog2类中重写了equals()方法,重写之后是比较的内容
package 集合;


import java.util.Collection;
import java.util.ArrayList;
import java.util.Objects;

public class FangfaER2 {
    public static void main(String[] args) {
        Collection c1= new ArrayList();
        boolean b = c1.add(123);
        boolean b1 = c1.add("abc");
        boolean b2 = c1.add(new Dog2());
        boolean b3 = c1.add(new Dog2("二哈",12));
        Dog2 d = new Dog2("小黑",1);
        boolean b4 = c1.add(d);
        
        System.out.println(c1.contains(123));
        
        System.out.println(c1.contains("abc"));
        
        System.out.println(c1.contains(new Dog2()));
        
        System.out.println(c1.contains(new Dog2("二哈", 12)));
        
        System.out.println(c1.contains(d));

    }
}
class Dog2{
    private String name;
    private int age;

    public Dog2(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public Dog2(){

    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Dog2 dog2 = (Dog2) o;
        return age == dog2.age &&
                Objects.equals(name, dog2.name);
    }

}

  • 这个时候由于我们的Dog2类中重写了equals()方法,这个时候我们举的例子都是返回true

  • 当我们使用实际对象是ArrayList的Collection接口引用调用contains(Object obj)方法判断我们的obj对象存不存在时

    • 这个时候我们的obj在我们调用contains()方法的第几个位置,这个时候我们就要调用几次我们的equals()方法
    • 这个是因为我们的ArrayList是有序的
  1. containsAll(Collection coll);

这个方法时传入一个集合,判断我们调用这个方法的集合是不是包含了参数集合对象

  • 这个时候其实和我们上面是一样的,我们是通过参数集合中的每一个对象分别去和调用集合中的元素一一进行比较,这个时候也是使用的我们的参数集合中的每一个元素的模板类的equals()方法去比较

eg:

package 集合;

import java.util.Collection;
import java.util.ArrayList;

public class ContainsAllDemo {
    public static void main(String[] args) {
        Collection coll = new ArrayList();

        coll.add(123);
        coll.add(1234567890);
        coll.add("abc");
        coll.add(456);
        coll.add(new Dog3("大黄",1));
        Collection coll2 = new ArrayList();
        coll2.add(123);
        coll2.add("abc");
        coll2.add(456);
        coll2.add(new Dog3("小黑",12));
        
        System.out.println(coll.containsAll(coll2));
    }
}
class Dog3{
    private String name;
    private int age;
    public Dog3(){

    }
    public Dog3(String name, int age){
        this.name=name;
        this.age=age;
    }
    public boolean equals(Object o){
        if(o==this) {
            return true;
        }else if(o==null||o.getClass()!=getClass()){
            return false;
        }
        else{
            Dog3 dog = (Dog3)o;
            if((dog.name==this.name)&&(dog.age==this.age)){
                return true;
            }else{
                return false;
            }
        }
    }
    @Override
    public String toString() {
        return "Dog3{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}

  • 这里我们是重写了equals()方法了,如果这里我们没有重写这个equals()方法,那么我们这里比较的也还是地址,这个时候我们重写了equals()方法了,这个时候我们就是比较的内容
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/632216.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号