2014-10-02 3 views
0

내지도 키 모음을 배열 목록으로 어떻게 넣을 수 있습니까?지도 키 집합을 배열 목록으로 변환하는 방법

Map foo = new HashMap<Character,Integer>(); 

다음과 같이 내가 ArrayList에에 열쇠를 넣어 노력하고 값을 추가 한 후 :

ArrayList<Character> bar = new ArrayList<Character>(foo.keySet()); 

을하지만, 컴파일러가 던지고 다음과 같이

나는지도를 초기화하고 다음 오류 :

warning: [unchecked] unchecked conversion 
ArrayList<Character> bar = new ArrayList<Character>(foo.keySet()); 
                    ^
required: Collection<? extends Character> 
found: Set 

나는 키의 변환이 필요하다는 것을 알고 있지만 keySet()에서 본 모든 예제가 사용한 메서드를 따르기 때문에이 메서드를 구현하는 방법을 모르겠습니다.

+0

공급 제네릭 형식을 통해하려면 '지도 <문자, 정수> foo는 = 새로운 HashMap의 <문자, 정수>();' – hoefling

+0

제쳐두고, 그것들을 정렬하거나 중복을 추가 할 계획이 아니라면 실제로'List'가 아닌'Set'에 실제로 보관하는 것이 더 낫습니다. 'List'는 주문에 대한 의미를 암시하는데, 이는'keySet' 메소드를 통해 목록을 초기화함으로써 얻지 못할 것입니다. – Krease

답변

0

그냥 foo의 선언에 대한 제네릭을 사용

Map<Character,Integer> foo = new HashMap<Character,Integer>(); 

그런 foo.keySet()이 문제를 해결, 올바른 제네릭 형식 Set<Character>이있을 것이다.

-1

당신은

Set<Character> bar = new HashSet<Character>(foo.keySet()); 
+0

'Set'을 사용하는 것이 더 정확할 수도 있지만 필수는 아니며'keySet()'의 결과를 OP가하려고하는'List'에 추가 할 수 있습니다. – Krease

0

귀하의 Map foo 참조 일반적인 아닙니다 당신의 키를 저장하는리스트를 세트하지가 필요합니다 (그것은 원시입니다), 그래서 컴파일러는 안전하게 수 (항상 HashMap<Character,Integer>을 유지한다고 가정 할 수는 없습니다 또한 HashMap<String,Integer>).

foo.keySet()의 결과로 일반적인 Set<Character>을 반환하지 않기 때문에,하지만 원시 Set하지만 ArrayList<Character>의 생성자는 Character의 수집 기대 (또는 문자에서 파생 된 형식의 컬렉션을 - 즉 Collection<? extends Character>에서), 원시 Set 수 ' t는 나타냅니다.

, 당신은 명시 적으로 foo 참조 제네릭 형식을 설정해야이 문제를 해결지도에

Map<Character, Integer> foo = new HashMap<Character, Integer>(); 
// ^^^^^^^^^^^^^^^^^^^^ - add this 
관련 문제