2011-09-14 6 views
0

불분명한 질문을 게시하는 것은 유감입니다. 이것은 hashmap을 사용하는 나의 처음이고 그러므로 나는 혼란 스러웠다. 이 질문을 더 나은 방법으로 여기서 설명하려고 시도했습니다. - store key values of hashmap in string[]문자열 []에서 정렬 된 해시 맵의 Sstore 키 - 값

값을 기준으로 정렬 된 해시 맵이 있습니다. 정렬 된 맵에서 키를 추출하여 String [] 배열에 저장하려고합니다. 값의 순서에 따라 키 순서가 중요합니다. 내가 값에 대한 해시 맵을 정렬이 코드를 사용 -

http://www.xinotes.org/notes/note/306/ 키 배열을 추출하려면, 나는

String[] keys = (String[])(hm.keySet().toArray(new String[hm.size()])) 

을 시도

그러나이 방법 didnt 한 작업 (여기 HM은 해시 맵입니다). 키 문자열 []에는 키가 있지만 원하는 정렬 순서는 아닙니다.


업데이트

: 나는의 LinkedHashMap을 사용하고 배열에 정렬 된 키 값을 저장 할 수 있었다. Here은 코드 링크입니다.

+3

당신은 "정렬 된 해시 테이블"을 가지고 있다고 말하면 정확히 - 무슨 뜻입니까? –

+0

무엇이 작동하지 않습니까? 그 명령은 예상대로였습니까? – amit

+0

죄송합니다. 오타가 .. 값에 따라 해시 맵을 정렬했습니다 – Umang

답변

0

HashMap은 key.hashValue()를 사용하여 값을 정렬합니다. TreeMap을 대신 사용하십시오.

+0

아니요. 정렬 작업을 수행하지 않습니다. – EJP

+0

어쨌든 정렬 된 해시 맵에서 키 값을 추출하여 문자열 []로 저장할 수 있습니까? – Umang

+0

@Umang 예, 질문에 직접 대답했습니다. – EJP

0

값을 기준으로 정렬 된 해시 맵이 있습니다. 값을 기준으로 해시 맵을 정렬했습니다.

아니요. HashMap은 전혀 정렬되지 않습니다. values ​​()를 Collection으로 가져올 수 있으며 원하는대로 정렬 할 수 있지만 HashMap 자체는 정렬하지 않습니다.

그러나이 방법은 효과가 없습니다. 그것은 임의의 방식으로 키를 저장합니다.

특히 HashMap을 전혀 정렬하지 않았으므로 다른 작업을 수행하도록 정의되지 않았습니다.

당신이 여기서 말하는 것을 분명히해야합니다. 값을 정렬하려면 위의 작업을 수행하십시오. 키를 정렬하려면 values() '대신 keys()을 사용하십시오. Map 자체를 키로 정렬하려면 TreeMap을 사용하십시오. 지도 자체를 값, 불운으로 정렬하려면 원할 수 없습니다.

+0

해시 맵 자체가 정렬되어 있지 않습니다. 나는 hashmap을 생성하고 그것을 정렬했다는 것을 의미했다. – Umang

+0

정렬 방법에 대한 링크 질문을 볼 수 있습니다 – Umang

+0

@Umang 그 링크는 HashMap 정렬을 전혀 설명하지 않습니다. 그것은 정렬 된 List를 반환하는 코드를 보여줍니다. HashMap에는 아무 것도 수행되지 않았습니다. – EJP

2

오타 및 해시 맵 사용에 대한 설명에 따라 키 검색 순서가 삽입 순서와 일치하지 않습니다. LinkedHashMap을 사용하십시오. 이것은 외부 정렬을 수행 한 다음 정렬 된 항목을 맵에 삽입하는 것입니다.

항목이 맵에 삽입되는 동안 정렬되도록하려면 TreeMap을 사용하십시오. 사용자 정의 콤퍼레이터를 사용하거나 키 객체가 Comparable 인터페이스를 구현하도록 할 수 있습니다.

+0

또는 「자연 순서」의 TreeMap. – Thilo

+0

또는 원하는 모든 순서에 대해 비교자를 사용하는 TreeMap. – EJP

+0

@EJP : 예, 답안에서 이미 언급되었습니다 (모든 주문의 경우 사용자 지정 비교 자, 자연 주문의 경우 Comparable).어쩌면 내가 사용자 지정 비교기 일반적으로 비정형 순서 및 자연 순서에 대한 비교에 사용되는 명시 적으로 할 필요가 있었다. – Scorpion

0

이 시도 :

public static void main(String[] args) { 
    Map<String, String> hm = new TreeMap<String, String>(); 
    hm.put("AAA", "typeAAA"); 
    hm.put("BBB", "typeBBB"); 
    hm.put("ABB", "TypeABB"); 
    String[] keys = hm.keySet().toArray(new String[0]); 
    for (String key : keys) { 
     System.out.println("key: " + key); 
    } 
} 

이 출력은 다음과 같습니다

key: AAA 
key: ABB 
key: BBB 
0

그것은 당신이 HashMap의 키의 순서는 키 당신의 정렬 된 목록과 동일 할 것으로 보인다 .이것은 간단히 가능하지 않습니다. HashMap 키는 해시 테이블 알고리즘에 의해 결정됩니다. 예 : 키의 해시 값과 삽입 및 삭제 시퀀스에 의존하는 복잡한 프로세스입니다.

가까운 LinkedHashMap을 만들고 이전 키의 항목을 정렬 된 키 순서대로 삽입하여 채우십시오. 그런 다음 LinkedHashMap의 키를 반복 할 경우 삽입 된 순서대로 다시 가져옵니다. 그러나 이것은 무거운 가중치 솔루션이며, 이후에 "정렬 된"맵에 항목을 추가해야하는 경우에 문제가됩니다. TreeMap을 사용하는 것이 더 좋습니다.


나는 해시 맵을 변경하려면니까. 정렬 된 값의 순서로 키를 가진 배열을 얻고 싶습니다.

이 경우, HashMap의 키를 배열로 추출하고 정렬하면됩니다. 이 코드는 다른 답변에서 제공되었습니다.

다른 한편으로지도의 키가 항상 정렬 된 순서 (다른 의견에서 말하는 것처럼 보임)로 나오도록하려면 입니다.

+0

해시 맵을 변경하고 싶지 않습니다. 정렬 된 값의 순서로 키를 가진 배열을 얻고 싶습니다. 덕분에 – Umang

+0

. 그것을 들여다 볼 것입니다. – Umang

관련 문제