Java で HashMap を並べ替える

Aryan Tyagi 2023年1月30日 2021年7月3日
  1. Java で HashMap をキーで並べ替える
  2. Python で HashMap を値で並べ替える
Java で HashMap を並べ替える

ハッシュマップはソート用には作成されていません。それらは迅速な検索のために作られています。したがって、はるかに簡単な方法は、ハッシュマップから各要素を取得し、ヒープやセットなどの並べ替えに適したデータ構造に配置して、そこで並べ替えることです。

ただし、ハッシュマップを使用して並べ替えるというアイデアの場合は、このチュートリアルでいくつかの方法について説明します。

HashMap を並べ替える必要がある場合は、必要な基準に従って明示的に並べ替えます。Java では、HashMap をキーまたは値で並べ替えることができます。

Java で HashMap をキーで並べ替える

キーを使用して、HashMap を LinkedHashMap または TreeMap の 2つの方法で並べ替えることができます。

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 の実装の 1つは、TreeMap です。これは、TreeMap の作成時に提供されるコンパレータによって指定された自然な順序またはカスタムの順序でキーを保持するのに役立ちます。これは、ユーザーが HashMap のエントリをソートされた順序で処理できることを意味します。ただし、HashMap は順序を保証しないため、ユーザーは特定の順序でマッピングされた HashMap を渡すことはできません。

コード:

import java.util.Comparator;
import java.util.Map;
import java.util.HashMap;  
import java.util.TreeMap;  
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.ArrayList;
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");  
}  
}  
 

関連記事 - Java HashMap