apollo89 요즘 읽고 있는 책
프로그래머의 길,멘토에게 묻다
데이브 후버,애디웨일 오시나이 공저/강중빈 역
프로그래머 그 다음 이야기
임백준 등저
대규모 서비스를 지탱하는 기술
이토 나오야,다나카 신지 공저
존 맥아더의 성경,이렇게 믿어라
존 맥아더 저
아이디어맨 Idea man
안진환 역/폴 앨런 저
예스24 | 애드온2

HashTable & HashMap

HashTable

HashTable은 키나 값에 Null을 허용하지 않는다

또한 Object에 정의된 hashCode()와 equals() 매서드를 재의하는 객체들만 저장할 수 있다

다행히도 자바 내장 클래스들은 대부분 hashCode()가 구현되어있다는 것을 알고 있을 것이다

특히 String타입이 hashCode(), equals()매서드가 두개 모두 구현되어있다

HashTable은 Map 클래스와 마찬가지로 반복자(interator)를 직접 제공하지 않는다


다음 두가지 방식으로 HashTable의 내용을 출력할수있다

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));
}

또는

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 지원 안함)

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을 쓰면 속도가 빠르다는 말이된다
 
굳이 동기화 하자면 다음과 같이 사용해야할것이다

Map m=Collections.synchronizedMap(new HashMap(...));


간단히 정리하자면 HashMap이 HashTable에 비해 좀더 실용적으로 변한 형태라고 보면 될것이다

일반적으로 쓴다면 HashMap을 추천하는 바이다


출처 : http://cafe.naver.com/inggi.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=48 (새 창으로 열기)

─ tag  , ,
Trackback URL : http://apollo89.com/blog/trackback/359
openclose