HOWTO · Java

Java에서 HashMap 정렬

이 튜토리얼은 Java HashMap을 정렬하는 방법을 보여줍니다.

이 페이지의 내용

Hashmap은 정렬 용으로 만들어지지 않았습니다. 빠른 검색을 위해 만들어졌습니다. 따라서 훨씬 쉬운 방법은 Hashmap에서 각 요소를 가져 와서 정렬에 더 적합한 데이터 구조 (예 : 힙 또는 집합)에 배치 한 다음 거기에서 정렬하는 것입니다.

그러나 해시 맵을 사용하여 정렬하는 것이 아이디어라면이 튜토리얼에서 몇 가지 방법을 논의 할 것입니다.

HashMap을 정렬해야하는 경우 필요한 기준에 따라 명시 적으로 수행합니다. Java에서 키 또는 값으로 HashMaps를 정렬 할 수 있습니다.

Java에서 키로 HashMap 정렬

키를 사용하여LinkedHashMap또는TreeMap의 두 가지 방법으로 HashMap을 정렬 할 수 있습니다.

LinkedHashMap접근 방식을 사용하는 동안 키 세트를 확보하는 것이 중요합니다. 이러한 키 세트를 받으면이를 목록으로 변환합니다. 이 목록은 그에 따라 정렬되고 동일한 순서로LinkedHashMap에 추가됩니다. 키별로 HashMap을 정렬 할 때 키가 중복되지 않습니다.

암호:

import static java.util.stream.Collectors.*;

import java.lang.*;
import java.util.*;
import java.util.stream.*;
import java.util.stream.Collectors;
public class Main {
  // unsorted
  static Map<String, Integer> lhmap = new HashMap<>();

  public static void sort() {
    HashMap<String, Integer> x = lhmap.entrySet()
                                     .stream()
                                     .sorted((i1, i2) -> i1.getKey().compareTo(i2.getKey()))
                                     .collect(Collectors.toMap(Map.Entry::getKey,
                                         Map.Entry::getValue, (z1, z2) -> z1, LinkedHashMap::new));

    // Show Sorted HashMap
    for (Map.Entry<String, Integer> start : x.entrySet()) {
      System.out.println("Your Key " + start.getKey() + ", Your Value = " + start.getValue());
    }
  }

  public static void main(String args[]) {
    // insert value
    lhmap.put("a", 1);
    lhmap.put("aa", 3);
    lhmap.put("ab", 5);
    lhmap.put("ba", 7);
    lhmap.put("bb", 8);
    lhmap.put("aac", 23);
    lhmap.put("bac", 8);
    sort();
  }
}

출력:

Your Key a, Your Value = 1
Your Key aa, Your Value = 3
Your Key aac, Your Value = 23
Your Key ab, Your Value = 5
Your Key ba, Your Value = 7
Your Key bac, Your Value = 8
Your Key bb, Your Value = 8

TreeMap을 사용할 수도 있습니다. SortedMap의 구현 중 하나는TreeMap을 생성하는 동안 제공된 비교기에 의해 지정된 자연 순서 또는 사용자 정의 순서로 키를 유지하는 데 도움이되는TreeMap입니다. 이것은 사용자가 정렬 된 순서로 HashMap의 항목을 처리 할 수 ​​있음을 의미합니다. 그러나 사용자는 HashMap이 순서를 보장하지 않기 때문에 특정 순서로 매핑 된 HashMap을 전달할 수 없습니다.

암호:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class SortHashmap {
  public static void main(String args[]) {
    // Create a HashMap object ob
    HashMap<Integer, String> ob = new HashMap<Integer, String>();
    // addding keys and values
    ob.put(23, "Vedant");
    ob.put(7, "Aryan");
    ob.put(17, "Tarun");
    ob.put(9, "Farhan");
    Iterator<Integer> it = ob.keySet().iterator();
    System.out.println("Before Sorting");
    while (it.hasNext()) {
      int key = (int) it.next();
      System.out.println("Roll number:  " + key + "     name:   " + ob.get(key));
    }
    System.out.println("\n");
    Map<Integer, String> map = new HashMap<Integer, String>();
    System.out.println("After Sorting");
    // using the TreeMap constructor in order to sort the HashMap
    TreeMap<Integer, String> tm = new TreeMap<Integer, String>(ob);
    Iterator itr = tm.keySet().iterator();
    while (itr.hasNext()) {
      int key = (int) itr.next();
      System.out.println("Roll no:  " + key + "     name:   " + ob.get(key));
    }
  }
}

Python에서 값으로 HashMap 정렬

이 방법은 항목 항목을 목록에 보관 한 다음 해당 값에 따라 항목 목록을 정렬하는 것을 목표로합니다. 이러한 값과 키는 항목 목록에서 검색된 다음 그에 따라 새 HashMap에 배치됩니다.
이 새로운 HashMap으로 인해 전적으로 값을 기준으로 정렬됩니다.

값을 기준으로 항목을 비교하려면comparator를 만들어야합니다. 이 접근 방식을 사용하는 동안 우리는 중복 값을 저장할 수 있음을 명심해야합니다.

아래 코드를 참조하십시오.

import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class SortingByValue // implementing the HashMap
{
  Map<String, Integer> map = new HashMap<String, Integer>();
  public static void main(String[] args) {
    SortingByValue ob = new SortingByValue();
    ob.TheMap();
    System.out.println("SORTING IN ASCENDING ORDER:");
    ob.SortingByValue(true);
    System.out.println("SORTING IN DESCENDING ORDER");
    ob.SortingByValue(false);
  }

  void TheMap() // Creating a method to add elements into the  HashMap
  {
    map.put("SUZUKI", 65090);
    map.put("HERO", 24020);
    map.put("DUCATI", 90000);
    map.put("YAMAHA", 71478);
    map.put("HARLEY", 86946);
    map.put("KWASAKI", 99990);
    System.out.println("VALUE BEFORE SORTING:: ");
    printMap(map);
  }
  // sorting the elements ACCORDING to values
  void SortingByValue(boolean order) {
    // converting HashMap into a List
    List<Entry<String, Integer>> list = new LinkedList<Entry<String, Integer>>(map.entrySet());
    // sorting the list comprising items
    Collections.sort(list, new Comparator<Entry<String, Integer>>() {
      public int compare(Entry<String, Integer> obj1, Entry<String, Integer> obj2) {
        if (order) {
          // comparing the two object and returning an integer
          return obj1.getValue().compareTo(obj2.getValue());
        } else {
          return obj2.getValue().compareTo(obj1.getValue());
        }
      }
    });
    // Displaying the sorted HashMap
    Map<String, Integer> sortedhashMap = new LinkedHashMap<String, Integer>();
    for (Entry<String, Integer> entry : list) {
      sortedhashMap.put(entry.getKey(), entry.getValue());
    }
    printMap(sortedhashMap);
  }
  // Function for Displaying the elements
  public void printMap(Map<String, Integer> map) {
    System.out.println("BIKE\t\t PRICE ");
    for (Entry<String, Integer> entry : map.entrySet()) {
      System.out.println(entry.getKey() + "\t \t" + entry.getValue());
    }
    System.out.println("\n");
  }
}