2012-07-23 2 views
2

:() 작업

This example creates a hashtable of numbers. It uses the names of the numbers as keys: 

    Hashtable<String, Integer> numbers 
    = new Hashtable<String, Integer>(); 
    numbers.put("one", 1); 
    numbers.put("two", 2); 
    numbers.put("three", 3); 

To retrieve a number, use the following code: 

    Integer n = numbers.get("two"); 
    if (n != null) { 
    System.out.println("two = " + n); 
    } 

를 해시 테이블은 키와 값에 널 (null)을 허용하지 않는 경우는 GET 동안 if (n != null) { 위의 코드에서() 연산을 사용하는 이유 ?

HashMap 용으로 작성 되었다면 HashMap은 키와 값에 null을 허용하지만 Hashtable에는 왜 이것을 사용합니까?

답변

5

get() 메서드는 지정된 키가 Hashtable에없는 경우 null을 반환하기 때문에 좋은 방법입니다.
위의 코드 예에서 우리는 "two" 키가 있다는 것을 알고 있기 때문에이를 생략 할 수 있지만 실제 응용 프로그램에서는 그렇지 않습니다.

3

get는 키가 맵/테이블에없는 경우 null을 반환합니다. 지정된 키가 없습니다

1

이이 두 가지 문제가 명확 동안은

if (number.containsKey("two")) { 
    Integer n = numbers.get("two"); 
    System.out.println("two = " + n); 
} 

를 작성할 수 값으로 반환 널 얻을.

  1. 지도에 두 번 액세스하기 때문에 속도가 느립니다.
  2. 다른 스레드에서 컬렉션이 업데이트되면 잠재적 인 경쟁 조건이 있습니다.

스레드 안전성 Hashtable이 선택되었으므로 스레드 안정성보다 성능이 중요하지 않으므로 두 번째 이유가 더 많이 발생합니다.

3

존재 않을 경우