ArrayList在添加对象时是否使用添加对象的hashCode方法

时间:2014-05-04 04:31:27

标签: java arraylist hashcode

以下代码是否使用hashCode类的Scooter方法:

void using_ArrayList(){
        List coll=new ArrayList();

        Scooter s1=new Scooter();
        s1.setNumber("HR26KC345352344");
        s1.setHorse_power(123.321);
        s1.setYear_of_made(1997);

        Scooter s2=new Scooter();
        s2.setNumber("HR26KC34535");
        s2.setHorse_power(123.321);
        s2.setYear_of_made(1997);

        Scooter s3=new Scooter();
        s3.setNumber("HR26KC345352344");
        s3.setHorse_power(123.321);
        s3.setYear_of_made(1997);

        coll.add(s1);
        coll.add(s2);
        coll.add(s3);

        Scooter s=new Scooter();
        s.setNumber("HR26KC345352344");
        System.out.println(coll.contains(s));
}

踏板车类:

class Scooter{
    private String number;
    private double horse_power;
    private int year_of_made;
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public double getHorse_power() {
        return horse_power;
    }
    public void setHorse_power(double horse_power) {
        this.horse_power = horse_power;
    }
    public int getYear_of_made() {
        return year_of_made;
    }
    public void setYear_of_made(int year_of_made) {
        this.year_of_made = year_of_made;
    }

    public boolean equals(Object o){
        if((o instanceof Scooter)&&((Scooter)o).getNumber()==this.getNumber()){
            System.out.println("EQUALS:TRUE"); //OK
            return true;
        }
        else{
            System.out.println("EQUALS:FALSE"); //OK
            return false;
        }
    }

    public int hashCode(){
        System.out.println("HASHCODE");// NOT able To reach here...
        return number.length();
    }

}

我能够达到equals()方法。但无法达到hashCode()方法。 hashCode()集合是否未使用ArrayList方法?请告诉我,因为我是Java-Collections的新手。

4 个答案:

答案 0 :(得分:3)

与HashMap不同,ArrayList不需要使用hashCode()方法,因为ArrayList中元素的顺序取决于它们的插入顺序,而不是散列。

答案 1 :(得分:1)

  

ArrayList集合是否未使用hashCode()方法?

假设您的意思是hashcode()元素的ArrayList方法,那么当您在hashCode()上调用ArrayList时,就会调用它们。这是{em>唯一情况,其中hashCode()对象调用元素ArrayList方法。

您可以通过查看源代码或阅读javadoc来确认这一点。 (行为在List API中指定,并在AbstractList ...)

中实施

因此,您可能会在hashCode()add来电中看到您示例中对contains的来电。特别是,contains需要一次一个地调用列表元素equals,直到调用返回trueArrayList实施并没有让contains走得更快。

答案 2 :(得分:0)

从您的代码中可以明显看出,它不使用hashCode。此方法用于散列,而不是像ArrayList这样的线性集合。并在那里搜索O(N)

答案 3 :(得分:-1)

Hashcode仅用于那些需要识别唯一值的集合。

所以它用于Set类集合。

允许在arraylist副本中使用

,因此没有检查哈希码的概念。