[java] java : HashMap <String, int>가 작동하지 않습니다

HashMap<String, int>작동하지 않는 것 같지만 HashMap<String, Integer>작동합니다. 어떤 아이디어가 있습니까?



답변

Java에서는 기본 유형을 일반 인수로 사용할 수 없습니다. 대신 사용하십시오 :

Map<String, Integer> myMap = new HashMap<String, Integer>();

으로 자동 복싱 / 언 박싱 코드에 약간의 차이가있다. 자동 권투는 다음과 같이 쓸 수 있음을 의미합니다.

myMap.put("foo", 3);

대신에:

myMap.put("foo", new Integer(3));

자동 복싱은 첫 번째 버전이 두 번째 버전으로 암시 적으로 변환됨을 의미합니다. 자동 우편함은 다음과 같이 쓸 수 있음을 의미합니다.

int i = myMap.get("foo");

대신에:

int i = myMap.get("foo").intValue();

암시 적 호출 intValue()은 키를 찾지 못하면 다음과 같이 키를 생성 함 을 의미합니다 NullPointerException.

int i = myMap.get("bar"); // NullPointerException

이유는 유형 삭제 입니다. 예를 들어 C #에서는 제네릭 형식이 런타임에 유지되지 않습니다. 그들은 당신이 이것을 저장하는 명시 적 캐스팅을위한 “구문 설탕”입니다.

Integer i = (Integer)myMap.get("foo");

예제를 제공하기 위해이 코드는 완벽하게 합법적입니다.

Map<String, Integer> myMap = new HashMap<String, Integer>();
Map<Integer, String> map2 = (Map<Integer, String>)myMap;
map2.put(3, "foo");


답변

GNU Trove는 이것을 지원하지만 제네릭을 사용하지는 않습니다. http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html


답변

에서 기본 유형을 사용할 수 없습니다 HashMap. int또는 double작동하지 않습니다. 엔 클로징 유형을 사용해야합니다. 예를 들어

Map<String,Integer> m = new HashMap<String,Integer>();

이제 둘 다 객체이므로 작동합니다.


답변

int는 기본 유형이며 java here 기본 유형을 의미하는 것을 읽을 수 있으며 Map은 객체를 입력으로 사용하는 인터페이스입니다.

public interface Map<K extends Object, V extends Object>

object는 클래스를 의미하며 클래스에서 확장 된 다른 클래스를 만들 수 있지만 int에서 확장되는 클래스를 만들 수는 없습니다. 따라서 int 변수를 객체로 사용할 수 없습니다. 문제에 대한 견인 솔루션이 있습니다.

Map<String, Integer> map = new HashMap<>();

또는

Map<String, int[]> map = new HashMap<>();
int x = 1;

//put x in map
int[] x_ = new int[]{x};
map.put("x", x_);

//get the value of x
int y = map.get("x")[0];


답변

기본 유형이 아닌 일반 인수에 참조 유형을 사용할 수 있습니다. 그래서 여기에 사용해야합니다

Map<String, Integer> myMap = new HashMap<String, Integer>();

그리고 가치를

myMap.put("abc", 5);


답변