[java] 키를 기반으로 해시 맵 정렬

Java에 다음 해시 맵이 있습니다.

{B046 = 0.0, A061 = 3.0, A071 = 0.0, B085 = 0.0, B075 = 3.0, B076 = 9.0, B086 = 3.0, B095 = 0.0, B096 = 0.0, A052 = 0.0, B066 = 0.0, B056 = 9.0, B065 = 0.0, B055 = 9.0}

알파벳과 숫자가 고려되도록 해시 맵을 정렬하려면 어떻게해야합니까?

결과 해시 맵은 다음과 같아야합니다.

{A052 = 0.0, A061 = 3.0, A071 = 0.0, B046 = 0.0, B055 = 9.0, B056 = 9.0, B065 = 0.0, B066 = 0.0, B075 = 3.0, B076 = 9.0, B085 = 0.0, B086 = 3.0, B095 = 0.0, B096 = 0.0}

도움을 주셔서 감사합니다!



답변

정렬 사용 TreeMap:

Map<String, Float> map = new TreeMap<>(yourMap);

키별로 정렬 된 항목을 자동으로 넣습니다. 나는 String당신의 경우에 자연스러운 주문이 괜찮을 것이라고 생각 합니다.

참고 HashMap순서를 유지하지 않는 최적화를 조회 할 예정입니다.


답변

사용자 지정 비교기와 함께 TreeMap을 사용합니다.

class MyComparator implements Comparator<String>
    {
        public int compare(String o1,String o2)
        {
            // Your logic for comparing the key strings
        }
    }

TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());

새 요소를 추가하면 자동으로 정렬됩니다.

귀하의 경우에는 문자열 순서가 충분할 수 있으므로 비교기를 구현할 필요조차 없습니다. 그러나 소문자 알파가 대문자 앞에 나타나는 것과 같은 특수한 경우를 구현하거나 숫자를 특정 방식으로 처리하려면 비교기를 사용하십시오.


답변

TreeMap이러한 종류의 정렬 (자연)에 대한 최선의 방법입니다. TreeMap자연스럽게 키에 따라 정렬됩니다.

HashMap삽입 순서를 유지하지 않으며지도를 정렬하지도 않습니다. LinkedHashMap게재 순서를 유지하지만지도를 자동으로 정렬하지 않습니다. 전용 TreeMapMap인터페이스 천연 순서에 따른 맵을 정렬 (제 1 부호, 대문자 알파벳 초, 소문자 알파벳 마지막).


답변

TreeMap을 사용하십시오. 맵이 “그렇게 보이는”것은 약간 모호합니다. 기준에 따라 키를 정렬하고 맵을 반복하여 각 객체를 검색 할 수도 있습니다.


답변

그냥를 사용 TreeMap. SortedMap인터페이스를 구현 하므로 포함 된 키를 자동으로 정렬합니다. 원하는 결과를 얻기 위해 키를 알파벳순으로 정렬 할 수 있으므로 비교기를 제공 할 필요조차 없습니다.

HashMap은 정렬되지 않습니다. HashMap으로 할 수있는 유일한 일은 모든 키를 가져 와서 정렬 된 세트 또는 목록에 저장하고 목록을 정렬하는 것입니다.


답변

TreeMap 을 사용하여 지도를 정렬 할 수 있습니다.

Map<String, String> map = new HashMap<String, String>();
Map<String, String> treeMap = new TreeMap<String, String>(map);
//show hashmap after the sort
for (String str : treeMap.keySet()) {
    System.out.println(str);
}


답변

TreeMap정렬 된 형식으로 값을 저장 하는 것을 사용할 수 있습니다 .

Map <String, String> map = new TreeMap <String, String>();