2008-11-04 2 views
6

대개 내 맵 선언을 입력하지만 일부 maint를 수행하고 입력하지 않고 찾았습니다. 이것은 나를 생각하게했다 (제로!). 지도 선언의 기본 입력은 무엇입니까? 다음을 고려하십시오.K 및 V에 대한 HashMap 기본 유형

Map map = new HashMap(); 
map.put("one", "1st"); 
map.put("two", new Integer(2)); 
map.put("three", "3rd"); 
for (Map.Entry entry : map.entrySet()){ 
    System.out.println(entry.getKey() + " -> " + entry.getValue()); 
} 

이 오류는 Map.Entry에 호환되지 않는 유형입니다. 따라서 다음과 같이 선언문을 입력하면 :

Map<Object,Object> map = new HashMap(); 

다음과 같이 선언문을 입력하면됩니다. 그렇다면 선언에 설정되는 기본 유형은 무엇입니까? 아니면 다른 것을 놓치고 있습니까?

답변

4

유형은 입니다. java.lang.Object입니다.

의 Iterable 의 형태를 취하고있어서반복자 호출 위한 구조체. 세트은 제네릭과 함께 입력되지 않으므로 이터레이터는 개체의 개체를 반환합니다. 이것들은 명시 적으로 타입 으로 캐스팅되어야합니다. Map.Entry.

Map map = new HashMap(); 
map.put("one", "1st"); 
map.put("two", new Integer(2)); 
map.put("three", "3rd"); 
for (Object o : map.entrySet()) { 
    Map.Entry entry = (Map.Entry) o; 
    System.out.println(entry.getKey() + " -> " + entry.getValue()); 
} 
8

기본 유형은 없습니다.

Java generics의 유형은 컴파일 타임 검사 전용입니다. 런타임시 지워지고 본질적으로 사라집니다.

제네릭을 a) 코드를 잘 문서화하고 b) 유형 안전성을 위해 제한된 컴파일 타임 검사를 사용할 수있는 정적 도우미라고 생각하십시오.

1

HashMap은 Think C++ 컨테이너의 집합입니다. 맵의 각 요소는 데이터를 보유하는 "버켓"입니다.
서로 다른 유형의 데이터를 버킷에 넣으므로 해시 맵은 모두 동일한 데이터 유형이 아님을 알아야합니다. 하나의 유형의 데이터 만 해시 맵에 배치되면 경고를 받지만 컴파일됩니다.