4
다음은 개체 목록에서 중복 개체를 찾는 코드입니다. 그러나 어떤 이유로 해시 세트는 동일한 객체를 저장하고 있습니다.동일한 개체를 저장하는 HashSet
Dog 클래스를 여기에 나는 확실히 여기에 뭔가를 놓친 거지하지만 난 HashSet에의 크기를 확인 할 때 밖으로 5
import java.util.ArrayList;
import java.util.HashSet;
public class DuplicateTest {
public static void main(String args[]){
ArrayList<Dog> dogList = new ArrayList<Dog>();
ArrayList<Dog> duplicatesList = new ArrayList<Dog>();
HashSet<Dog> uniqueSet = new HashSet<Dog>();
Dog a = new Dog();
Dog b = new Dog();
Dog c = new Dog();
Dog d = new Dog();
Dog e = new Dog();
a.setSize("a");
b.setSize("b");
c.setSize("c");
d.setSize("a");
e.setSize("a");
dogList.add(a);
dogList.add(b);
dogList.add(c);
dogList.add(d);
dogList.add(e);
if(a.equals(d)){
System.out.println("two dogs are equal");
}
else System.out.println("dogs not eqal");
for(Dog dog : dogList){
uniqueSet.add(dog);
}
System.out.println("number of unique dogs="+ uniqueSet.size());
/*for(Dog dog:uniqueSet){
System.out.println("uniqueset ="+dog.getSize());
}
for(Dog dog : duplicatesList){
System.out.println("duplicate dog="+dog.getSize());
}*/
}
}
오는
public class Dog implements Animal, Comparable<Dog>{
String size;
public void makeNoise(){
System.out.println("woof woof");
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public int compareTo(Dog d){
return this.size.compareTo(d.size);
}
public boolean equals(Dog d){
return this.size.equals(d.size);
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return super.hashCode();
}
}
은 그가 지금처럼 같은 크기의 서로 다른 두 개는 서로 다른 해시 코드를 가지고 있기 때문에, 다른'hashCode'을 무시한다. OP가 개 크기에 대해 하나의 문자열을 사용하는 것처럼 보이는 한 가지 가능성은'return size.charAt (0);' – halex
@halex : Yup을 사용하는 것입니다. 편집 할 것입니다. (하지만 나는 단지'charAt (0)'을 사용하지 않을 것입니다 ... size 해시 코드를 사용할 수도 있습니다 ...) –
'size' 해시 코드를 사용하는 솔루션이 더 좋습니다. :). +1 – halex