Hashmap은 int, char에서 작동하지 않습니다.
중복 가능성 :
Java 컬렉션에 기본 값 저장?
Java에서 다음을 사용할 때 :-
public HashMap<char, int> buildMap(String letters)
{
HashMap<char, int> checkSum = new HashMap<char, int>();
for ( int i = 0; i < letters.length(); ++i )
{
checkSum.put(letters.charAt(i), primes[i]);
}
return checkSum;
}
부적절한 유형과 관련된 오류가 발생합니다. char 및 int 대신 Character 및 Integer를 사용하여 문제를 해결했습니다. 그러나 HashMap이 원시 데이터 유형을 처리하지 못하는 이유를 파악하는 데 어려움이 있습니다.
일반 매개 변수는 기본 유형이 아닌 참조 유형에만 바인딩 할 수 있으므로 해당하는 랩퍼 유형을 사용해야합니다. HashMap<Character, Integer>
대신 시도하십시오 .
그러나 HashMap이 원시 데이터 유형을 처리하지 못하는 이유를 파악하는 데 어려움이 있습니다.
이것은 유형 삭제 때문 입니다. Java에는 처음부터 제네릭이 없었으므로 a HashMap<Character, Integer>
는 실제로 HashMap<Object, Object>
. 컴파일러는 잘못된 유형의 값을 입력하거나 잘못된 유형을 가져 오지 않도록 여러 추가 검사 및 암시 적 캐스트를 수행하지만 런타임에는 HashMap
클래스 가 하나만 있고 객체를 저장합니다.
다른 언어는 유형을 "특수화"하므로 C ++에서 a vector<bool>
는 vector<my_class>
내부적으로와 매우 다르며 공통 vector<?>
수퍼 유형 을 공유하지 않습니다 . Java는 사전 제네릭 코드와의 하위 호환성에 관계없이 a List<T>
가 a 가 되도록 정의 합니다. 제네릭 유형의 모든 매개 변수화에 대해 단일 구현 클래스가 있어야한다는이 이전 버전과의 호환성 요구 사항은 제네릭 매개 변수가 프리미티브에 바인드 할 수있는 템플릿 전문화 유형을 방지합니다.List
T
제네릭은 키워드 형태로 기본 유형을 사용할 수 없습니다.
사용하다
public HashMap<Character, Integer> buildMap(String letters)
{
HashMap<Character, Integer> checkSum = new HashMap<Character, Integer>();
for ( int i = 0; i < letters.length(); ++i )
{
checkSum.put(letters.charAt(i), primes[i]);
}
return checkSum;
}
업데이트 됨 : Java 7 이상에서는 다이아몬드 연산자를 사용할 수 있습니다.
HashMap<Character, Integer> checkSum = new HashMap<>();
제네릭은 기본이 아닌 객체 유형 만 지원합니다. C ++ 템플릿과 달리 제네릭은 코드 생성을 포함하지 않으며 사용하는 제네릭 유형의 수에 관계없이 HashMap 코드가 하나만 있습니다.
Trove4J 는 프리미티브를 사용하기 위해 선택된 컬렉션을 미리 생성 하여이Map<Character, Integer>
문제를 해결하고 필요한 경우 지원하기 위해 래핑 할 수있는 TCharIntHashMap 을 지원합니다 .
TCharIntHashMap : char 키 및 int 값에 대한 개방형 주소 맵 구현입니다.
HashMaps을 경우에만 사용할 수 있습니다 classes
, 없습니다 primitives
. programmerinterview.com 의이 페이지 는 답을 찾는 데 도움이 될 수 있습니다. 솔직히이 문제에 대한 답을 직접 찾지 못했습니다.
기본 유형을 콜렉션에 넣을 수 없습니다. 그러나 해당 개체 래퍼를 사용하여 선언 할 수 있으며 권투가 허용하는 한 여전히 기본 값을 추가 할 수 있습니다.
Generic Collection 클래스는 프리미티브와 함께 사용할 수 없습니다. 대신 Character 및 Integer 래퍼 클래스를 사용하십시오.
Map<Character , Integer > checkSum = new HashMap<Character, Integer>();
Generics
Wrapper
클래스 만 사용하여 정의 할 수 있습니다 . Wrapper 유형을 사용하여 정의하지 않으려면 아래와 같이 Raw 정의를 사용할 수 있습니다.
@SuppressWarnings("rawtypes")
public HashMap buildMap(String letters)
{
HashMap checkSum = new HashMap();
for ( int i = 0; i < letters.length(); ++i )
{
checkSum.put(letters.charAt(i), primes[i]);
}
return checkSum;
}
또는 랩퍼 유형을 사용하여 HashMap을 정의하고 기본 유형을 저장하십시오. 기본 값은 래퍼 유형으로 승격됩니다.
public HashMap<Character, Integer> buildMap(String letters)
{
HashMap<Character, Integer> checkSum = new HashMap<Character, Integer>();
for ( int i = 0; i < letters.length(); ++i )
{
checkSum.put(letters.charAt(i), primes[i]);
}
return checkSum;
}
참고 URL : https://stackoverflow.com/questions/13216314/hashmap-does-not-work-with-int-char
'Program Tip' 카테고리의 다른 글
지수 백오 프로 셀러리 작업 재시도 (0) | 2020.11.23 |
---|---|
MVC3 편집기 읽기 전용 (0) | 2020.11.23 |
피보나치 힙 데이터 구조의 직관은 무엇입니까? (0) | 2020.11.23 |
Bash에서 dirname의 마지막 부분을 얻는 방법 (0) | 2020.11.23 |
IPython 노트북에 웹 페이지에 대한 링크 삽입 (0) | 2020.11.23 |