2014-05-18 3 views
0

이 개인 TreeMap <String,Enclavament> a_enclavaments;처럼 정의 된 TreeMap이 있습니다. 나는 트리 맵의 모든 Enclavament 작업 할, 그래서 그들에 방법을 실행하는 모습을 위해 만든이 무슨 뜻입니다 :int 인덱스를 사용하여 TreeMap에서 항목에 액세스하는 방법?

for(int i = 0; i < a_enclavaments.size(); i++) 
    modify(a_enclavaments.get(i)); 

수정은 클래스 Enclavament에서 항목이 필요합니다.

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 
    at java.lang.Integer.compareTo(Unknown Source) 
    at java.util.TreeMap.getEntry(Unknown Source) 
    at java.util.TreeMap.get(Unknown Source) 

나는 이유를 이해하지 않습니다 내가 시작할 때 그러나,이 오류가 발생합니다. 나는 자바 API를 읽었습니다 그리고

get(Object key) 
    Returns the value to which the specified key is mapped, or if this map contains no mapping for the key. 

은 (는) 트리 맵에서 첫 번째, 그 다음 두 번째, 그 다음 세 번째 ... Enclavament을 반환 아닌가요 말한다? EDIT : TreeMap의 매개 변수를 문자열로 설정하고 정수 여야하기 때문에 첫 번째 문자를 가질 수 있습니까?

+0

왜 그렇게 생각하니? –

+0

String을 허용하는'modify()'메소드를 보자. – Braj

+0

'TreeMap'은 키 - 값 쌍이다. – Braj

답변

4

Map 키를 기반으로 값을 저장합니다. 키는 Map 데이터 구조 (배열, 연결된 목록, 트리 등 Map의 구현에 따라) 내에서 값의 위치를 ​​정의하는 역할을합니다. 이것을 알면 Mapindex 개념과 작동하지 않으며 키만 있습니다. 이 경우

, 당신은 당신의 키로 String 값을 설정하지만, Integer를 사용하여 데이터를 검색하기 위해 노력하고, 예외는 그것에 대해 매우 분명하고 :

java.lang.ClassCastException : java.lang.String cannot be cast to java.lang.Integer

한 가지 가능한 해결책이 될 수있다 키를 Integer (가능한 경우)으로 변경하십시오. 당신이 Map의 값을 반복하는/필요합니다

, 당신은 Map#valuesfor 루프를 사용할 수 있습니다 :

for (Enclavament enclavement : a_enclavaments.values) { 
    //do what you want/need 
} 

의 경우는 후자를 사용하여,의 키의 유형을 변경 할 필요가 없습니다 Map

+0

남자는 단순히 값을 반복하고 싶어합니다. 그게 간단한 일 이라구. 그렇지? 그, 또는 그가 달성하려고하는 것에 대해 잘못된 컬렉션을 사용하고있을 수도 있습니다. –

+0

네, 그게 내가 생각했던 것입니다 ... 그래서 그것은 정수로 키를 변경하거나 String() 메소드를 사용하여 get()하는 것처럼 보입니까? –

+0

@ p.bosch 그것은 당신이 성취하고자하는 것에 달려 있습니다. –

1

당신은 (즉지도의 주요 유형에 따라 존재하지 않는 항목에 액세스를 시도하고, 당신은 Integer에 전달하는 String 키를 찾을 시도하고 있습니다.

을 내부적 지도가 수락 할 수 있도록 정의 된 키와 일치하도록 검색 한 키로 전달한 항목을 전송하려고 시도하고 있습니다. StringInteger으로 전송할 수 없으므로 예외가 발생합니다. 따라서

지도의 내용을 반복하고 싶다면 entrySet() :

을 사용하면됩니다.
for(Map.Entry<String, Enclavement> entry : a_enclavement.entrySet()) { 
    modify(entry.getValue()); 
} 

Map.Entry<K, V>은 편리한 반복을 위해 각지도의 키 - 값 쌍을 나타냅니다. 모든 키 또는지도의 모든 값에 대한 연산을 수행하려는 경우지도에서 가져 오려는 객체가됩니다 (예 : a_enclavement.entrySet()).