2014-03-19 1 views
-1

HashMap.containsKey() 메소드에 어떤 유형의 값을 전달할 수 있는지 알 수 없습니다. 이 메서드는 인스턴스 메서드를 (내가 틀렸다면 나를 수정하십시오)HashMap Class 일반 typing에 의해 제약되어야합니다 가정합니다. JAVA 그것을 제한하지 않는 경우, 왜 HashMap.put() 방법은 내 HashMapmap을 데 int 값 키를 넣을 수 없습니다 그것으로 ...HashMap.containsKey 메서드 제약 조건 매개 변수 유형을 사용하지 않는 이유는 무엇입니까?

HashMap<String, String> map = new HashMap<String, String>(); 
    // invalid 
    // map1.put(1, "a"); 

매개 변수화 유형과 일치해야합니까 키 유형은 String입니다. containsKey()put() 방법의 차이점은 무엇입니까?

public static void main(String[] args) { 
    HashMap<String, String> map1 = new HashMap<String, String>(); 
    map1.put("1", "a"); 
    map1.put("2", "b"); 
    map1.put("3", "c"); 
    if (map1.containsKey(1)) { 
     System.out.println("contain"); 
    } 
    else { 
     System.out.println("not contain"); 
    } 
} 

위의 코드에서 not contain이 출력되었고 컴파일러가 반대하지 않았습니다. 그렇게했다면,이 실수는 일어나지 않을 것입니다! 내가 맞습니까? 그렇지 않다면 나를 진실로 인도하십시오.
제 질문을 읽어 주셔서 감사합니다!

답변

0

Javadoc for HashMap Map.containsKey()은 인수로 Object을 사용합니다. 클래스는 제네릭 이전에 Java 1.2에 추가되었으며 1.5에 제네릭을 추가하면 메소드 서명이 변경되지 않았습니다.

if (map1.containsKey(1)) { 

1

Integer 객체에 오토 박싱됩니다 :

이 당신이 할 때 의미합니다. 그런 다음 키 조회 중에 해당 Integer 개체가 Map에 있는지 확인하기 위해 hashcode() 메서드가 호출됩니다. 그리고 ... 그렇지 않습니다.

올바르게 주어진 intString A를 작동하는 것을 변환 할 필요가 당신의 Map<String,String> :

if (map1.containsKey(String.valueOf(1)) { 
+0

이것은 사실이 아닙니다. 이것이 사실이라면 왜'map()'인터페이스에서'get (Object)'를'get (K)'로 바꾸겠습니까? – Brian

+0

@ 브라이언 내가 원래 쓴 것을 다시 읽으십시오 : 제네릭이 옳습니다.나는 인터페이스가 아닌 클래스를 입력하는 것을 정말로 의미한다고 생각하지만 그다지 정확하지는 않습니다. 그러나 이것이 처음부터 대답의 중요한 부분이 아니기 때문에 ... 편집되었습니다. –

2

답은 PECS를 중심으로, 내가 설명한 개념은 here입니다.

짧은 이야기는 Map<?, ?>으로 기술적으로 소비자 방법이 아니지만 Map.containsKey(K)을 generic 매개 변수로 호출 할 수 없다는 것입니다. Map.containsKey(Object)으로 지정하면 형식이 무엇이든간에 containsKey을 호출 할 수 있습니다. 이는 와일드 카드 바운드 맵에서 유용합니다.

public boolean containsKey(Object key) :

-1

containsKey 방법은 다음의 특성을 갖는다.

그래서 int을 전달하면 인수의 equals 메서드를 사용하여 동등 함을 결정합니다. 키가 Strings이므로 "1".equals(1)은 false를 반환합니다.

+0

당신은 나에게'containsKey' 방법의 간단한 코드를 설명 할 수 있습니까? 제발 .. – Cataclysm

+0

@brian roach의 대답은 이것보다 더 잘 설명되어 있습니다. –

관련 문제