以下代码是否使用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的新手。
答案 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
,直到调用返回true
。 ArrayList
实施并没有让contains
走得更快。
答案 2 :(得分:0)
从您的代码中可以明显看出,它不使用hashCode。此方法用于散列,而不是像ArrayList这样的线性集合。并在那里搜索O(N)
答案 3 :(得分:-1)
Hashcode仅用于那些需要识别唯一值的集合。
所以它用于Set类集合。
允许在arraylist副本中使用,因此没有检查哈希码的概念。