자바 에서 HashMap, Hashtable, LinkedList

오늘 재 미 있 는 질문 에 부 딪 혔 습 니 다. 바로 LinkedList 를 HashMap 이나 Hashtable 의 key 로 사용 하 는 것 이 었 으 나 데이터 가 저장 되 지 않 았 습 니 다.
우선 HashMap, Hashtable 을 말씀 드 리 겠 습 니 다. Cloneable, Map, Serializable 을 이 어 받 았 습 니 다.그들 두 사람 은 기본적으로 같다. "The HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls."차이 점 은 HashMap 이 'null values and the null key' 를 허용 하 는 동시에 unsynchronized.그것 의 성능 은 "initial capacity and load factor" 에 달 려 있 으 며, 공식 문 서 를 구체 적 으로 참고 합 니 다.HashMap 의 또 다른 특징 은 저 장 된 요소 의 순 서 를 보장 할 수 없다 는 것 입 니 다. "HashMap does not guarante that the order will remain constant over time." 안에 저 장 된 key 에 대해 서 는 "To successful store and retrieve objects from a hashtable, the objects used as keys must implement the hashCode method and the equals method." 를 요구 합 니 다.더 제 테스트 입 니 다. 사실 이것 은 HashMap 에 도 적 용 됩 니 다.
이것 은 제 가 오늘 만난 문제 와 연결 되 었 습 니 다. LinkedList 류 의 hashCode () 함 수 는 List. hashCode () 에서 기원 되 었 습 니 다. 구체 적 으로 다음 과 같 습 니 다.
int hashCode = 1; Iterator i = list.iterator(); while (i.hasNext()) { E obj = i.next(); hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode()); }
즉, hashCode 는 내부 저장 대상 에 의존 하 는데 마침 제 가 저장 한 것 은 추상 적 인 유형 으로 다 형 성 을 실현 하 는 데 편리 하기 때문에 hashCode 함 수 를 실현 하지 못 했 습 니 다.String 과 유사 한 기본 데이터 형식 이나 hashCode 함 수 를 실현 한 대상 을 저장 하면 됩 니 다.
마지막 으로 HashMap 과 헷 갈 리 기 쉬 운 유형 이 하나 더 있 는데 요.이 는 'Serializable, Cloneable, Map < K, V >, Sorted Map < K, V >' 를 계승 하여 Sorted Map 인터페이스 류 의 유일한 실현 이다.그것 은 본질 적 으로 'Red - Black tree' 이 고 그 안에 저 장 된 key 는 오름차 순 으로 배열 되 어 있 으 며 'ascending key order' 이다.
 
참고:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/LinkedList.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/TreeMap.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/SortedMap.html

좋은 웹페이지 즐겨찾기