2011-04-09 2 views
2

해시 코드가 벡터에 추가 된 요소 당 값을 취하는 방법을 알 수 있습니까?벡터에 해시 코드 설명

Vector v = new Vector(); 

    //Add elements to Vector 
    v.add("1"); 
    System.out.println(v.hashCode()); 
    v.add("2"); 
    System.out.println(v.hashCode()); 
    v.add("="); 
    System.out.println(v.hashCode()); 

해시 코드 값은 벡터 AbstractList를 확장하기 때문에이 해시 코드입니다에 대한

80 
2530 
78491 

답변

3

그것은 List 인터페이스의 모든 (참) 구현을위한 동일하게 작동합니다. .hashCode 메서드의 동작은 다음과 같이

과 같이 정의됩니다. 리스트의 해시 코드는 다음의 계산의 결과로서 정의된다

int hashCode = 1; 
Iterator<E> i = list.iterator(); 
while (i.hasNext()) { 
    E obj = i.next(); 
    hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode()); 
} 

list1.equals(list2)이 의미하는 것을 보장 두 목록의 list1.hashCode()==list2.hashCode(), list1list2 그, Object.hashCode()의 일반 규약에 의해 요구.

glowcoder을 가리 켰을 때, AbstractList 그냥이 구현을 포함하고, 따라서 List 인터페이스의하지 모든 구현이 다시이 작업을 수행 할 수 있습니다.

예를 들어 Arrays.asList("1", "2").hashCode()으로 작성하고 hashCode() 구현을 String으로 변경하지 않는 한 동일한 2530을 얻을 수 있습니다.

2

, 그것은 그것을 사용합니다. 여기 그것이하는 것입니다. (이 추가 요소를 지원하는 경우)

public int hashCode() { 
int hashCode = 1; 
Iterator<E> i = iterator(); 
while (i.hasNext()) { 
    E obj = i.next(); 
    hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode()); 
} 
return hashCode; 
} 
+0

[Hashing it out] (http://www.ibm.com/developerworks/java/library/j-jtp05273/index.html)도 참조하십시오. – trashgod