hashCode()和equals()方法能用在ArrayList里面吗

hashCode()和equals()方法能用在ArrayList里面吗

hashCode()和equals()方法能用在ArrayList里面吗

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小脸 2021-02-03 13:51:59

同学你好,同学是想在其他类不参与的情况下,直接对ArrayList进行hashCode()和equals()方法调用吗?

如果是,是可以调用的,如下查看源码:

AbstractList中有hashCode()和equals()方法,而ArrayList继承AbstractList类,重写父类方法

http://img1.sycdn.imooc.com//climg/601a3901095bb1b307640706.jpg

http://img1.sycdn.imooc.com//climg/601a397e0991bc8407580139.jpg

同学在使用时直接调用即可,无需纠结

祝学习愉快~

好帮手慕小脸 2021-02-01 17:36:03

同学你好,是可以的,如下举例:

http://img1.sycdn.imooc.com//climg/6017cb7709cd310c07340792.jpg

祝学习愉快~

  • public class Person {
    private int age;
    private String name;

    public Person() {

    }
    public Person(int age, String name) {
    this.setAge(age);
    this.setName(name);
    }

    public int getAge() {
    return this.age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    public String getName() {
    return this.name;
    }
    public void setName(String name) {
    this.name = name;
    }
    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + age;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
    }
    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj.getClass() == Person.class) {
    Person person = (Person)obj;
    return (person.getAge() == age) && (person.getName().equals(name));
    }
    return false;
    }

    @Override
    public String toString() {
    return "name: "+this.name+", age: "+this.age;
    }

    }


    import java.util.ArrayList;
    import java.util.List;

    public class PersonTest {
    public static void main(String[] args) {
    List<Person> list = new ArrayList<Person>();
    Person p1 = new Person(10, "aaron");
    Person p2 = new Person(10, "aaron");
    list.add(p1);
    list.add(p2);

    for(Person p: list)
    System.out.println(p);
    }
    }



    http://img1.sycdn.imooc.com//climg/6017e0d9091a1c5803600086.jpg


    很明显,在ArrayList中使用hashCode()和equals()根本达不到想要的效果,除非把equals()方法和其他方法结合使用,比如说addToArrayList()方法,在这个方法里面用equals方法把两个对象的属性进行比较,否则,单独使用hashCode()和equals()方法达不到在Set中的效果,因为List本来就是可以存放重复数据的​

    2021-02-01 19:10:02
  • 同学你好,你的理解是正确的,但上述老师给出得代码是定义了两个ArrayList对象,如下:

    http://img1.sycdn.imooc.com//climg/6017e6cf093703ef07090288.jpg

    祝学习愉快~

    2021-02-01 19:33:35
  • 我想问下ArrayList的equals()方法并没有重写,按照道理应该比较的是a1和a2的地址才对,那么不应该是false吗?

    2021-02-02 00:24:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师