HashTable & HashMap
HashTable
HashTable은 키나 값에 Null을 허용하지 않는다
또한 Object에 정의된 hashCode()와 equals() 매서드를 재의하는 객체들만 저장할 수 있다
다행히도 자바 내장 클래스들은 대부분 hashCode()가 구현되어있다는 것을 알고 있을 것이다
특히 String타입이 hashCode(), equals()매서드가 두개 모두 구현되어있다
HashTable은 Map 클래스와 마찬가지로 반복자(interator)를 직접 제공하지 않는다
다음 두가지 방식으로 HashTable의 내용을 출력할수있다
1 2 3 4 5 6 7 8 |
HashTable hashTable= new HashTable(); hashTable.put("XML", "tag"); hashTable.put("oracle", "sql"); Enumeration keys=hashTable.keys(); while(keys.hasMoreElements()) { key=(String)keys.nextElement(); System.out.println(hashTable.get(key)); } |
또는
1 2 3 4 5 6 |
Set set=hashTable.keySet(); Iterator keys=set.interator(); while(keys.hasNext()){ key=(String)keys.next(); System.out.println(hashTable.get(key)); } |
HashMap
HashMap은 키나 값에 Null을 허용한다
HashMap 출력방법은 다음의 한가지 밖에 없다(Enumeration 지원 안함)
1 2 3 4 5 6 7 8 9 |
HashMap hashMap=new HashMap(); hashMap.put("XML", "tag"); hashMap.put("oracle", "sql"); Set set=hashMap.entrySet(); Iterator keys=set.iterator(); while(keys.hasNext()){ key=(String)keys.next(); System.out.println(hashMap.get(key)); } |
또한 HashTable은 thread safe**의 한 객체이지만 HashMap은그렇지 못해 unsynchronized하다
이말은 즉 멀티 쓰레드 환경이 아니면 HashMap을 쓰면 속도가 빠르다는 말이된다
굳이 동기화 하자면 다음과 같이 사용해야할것이다
1 |
Map m=Collections.synchronizedMap(new HashMap(...)); |
간단히 정리하자면 HashMap이 HashTable에 비해 좀더 실용적으로 변한 형태라고 보면 될것이다
일반적으로 쓴다면 HashMap을 추천하는 바이다
출처 : http://cafe.naver.com/inggi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=48