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