java 일반 객체에 Set으로 추가할 때, 특정 필드로 유일성을 보장하려면 hashCode()를 구현해야 한다. (참고로 Comparator(isEqual), compare() 메소드는 sorting 용이다.)
public class Up { private id; // setter, getter public int hashCode() {
return Long.hashCode(id);
} }
테스트 코드
Up up = new Up();
up.id = 1;
Up up2 = new Up();
up2.id = 1;
Set set = Sets.newHashSet();
set.add(up);
set.add(up2);
System.out.println(set);
up 객체에 hashcode() 를 상속/구현하지 않으면 set의 크기는 2가 된다.
Up[id=1..], Up[id=1..]
up 객체에 hashcode()를 추가하면, set의 크기는 1이다.
Up[id=1..]
* HashSet 구현 참조
add 할 때, 객체의 hash 코드를 참조한다.
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
'java core' 카테고리의 다른 글
java7->java8 전환 관련 네트워킹 이슈 (getaddrinfo) (0) | 2016.07.26 |
---|---|
java7 -> java8 전환 with spring 3.2 (1) | 2016.07.21 |
[자바] autoboxing 실수 (실 사례) (0) | 2016.05.20 |
List와 Set의 교집합(intersection) 구하기 (0) | 2016.04.12 |
[java] 숫자(int)를 문자열(String)로 변경할 때, comma(,)도 같이 표현하고 싶을 때 (0) | 2016.03.07 |