Java >> Java tutorial >  >> Tag >> HashMap

Sortering af HashMap efter værdier i java

Lad os lære at sortere hashmap efter værdier i java.

Sortering af HashMap efter værdier i java

Sortér hashmap efter værdi i java er et af de almindelige java-interviewspørgsmål. I java kan vi ikke direkte sortere HashMap efter værdi.

Sortering af et HashMap efter værdier kan gøres ved at skrive vores egen komparator, som sammenligner to elementer baseret på værdier.

Denne sammenligning tager Map.entry-objekter og ordrer i stigende eller faldende værdi.

I nedenstående java-program får vi først tilmeldinger pr. kalder entrySet()-metoden for klasse Map. Her har jeg lavet sortByValue(hash)-metoden, som accepterer indtastninger som parameter.

Sortér derefter i metoden sortByValue() baseret på værdier ved hjælp af tilpasset komparator. I næste trin konverter sæt til en liste.

Bruger nu Collections.sort() metoden sorteringsliste ved at overføre komparatorværdi. Tilføj endelig poster i sorteret rækkefølge ved at oprette LinkedHashMap.

I eksemplet nedenfor er dagsorden at sortere hashmap efter værdier, det vil sige solgte enheder (bil).

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;
public class SortHashMapByValue
{
   public static void main(String[] args)
   {
      HashMap<String, Integer> hash = new HashMap<String, Integer>();
      hash.put("Toyota", 78);
      hash.put("Skoda", 69);
      hash.put("Honda", 93);
      hash.put("Audi", 59);
      hash.put("Chevrolet", 39);
      hash.put("Hyundai", 56);
      Map<String, Integer> map = sortByValue(hash);
      System.out.println("Sorting hashmap by values in java: ");
      // printing sorted HashMap
      for(Map.Entry<String, Integer> me : map.entrySet())
      {
         System.out.println("Key = " + me.getKey() + ", Value = " + me.getValue());
      }
   }
   public static HashMap<String, Integer> sortByValue(HashMap<String, Integer> hm)
   {
      // creating list from elements of HashMap
      List<Map.Entry<String, Integer>> list = new LinkedList<Map.Entry<String, Integer>>(hm.entrySet());
      // sorting list
      Collections.sort(list, new Comparator<Map.Entry<String, Integer>>()
      {
         public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2)
         {
            return (o1.getValue()).compareTo(o2.getValue());
         }
      });
      HashMap<String, Integer> ha = new LinkedHashMap<String, Integer>();
      for(Map.Entry<String, Integer> me : list)
      {
         ha.put(me.getKey(), me.getValue());
      }
      return ha;
   }
}

Output:

Sortering af hashmap efter værdier i java:

Nøgle =Chevrolet, værdi =39
Nøgle =Hyundai, værdi =56
Nøgle =Audi, Værdi =59
Nøgle =Skoda, Værdi =69
Nøgle =Toyota, Værdi =78
Nøgle =Honda, værdi =93

Java sorter hashmap efter nøgle

Her er java-sorteringen af ​​HashMap efter nøgle.

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class SortHashMapByKey
{
   public static void main(String[] args)
   {
      HashMap<Integer, String> hm = new HashMap<Integer, String>();
      hm.put(9, "Apple");
      hm.put(14, "Orange");
      hm.put(2, "Mango");
      hm.put(98, "Pineapple");
      hm.put(5, "Watermelon");
      System.out.println("Before Sorting: ");
      Set set = hm.entrySet();
      Iterator iterate = set.iterator();
      while(iterate.hasNext())
      {
         Map.Entry me = (Map.Entry)iterate.next();
         System.out.print(me.getKey() + ": ");
         System.out.println(me.getValue());
      }
      Map<Integer, String> map = new TreeMap<Integer, String>(hm);
      System.out.println("After Sorting: ");
      Set set2 = map.entrySet();
      Iterator iterate2 = set2.iterator();
      while(iterate2.hasNext())
      {
         Map.Entry me2 = (Map.Entry)iterate2.next();
         System.out.print(me2.getKey() + ": ");
         System.out.println(me2.getValue());
      }
   }
}

Output:

Før sortering:
2:Mango
98:Ananas
5:Vandmelon
9:Æble
14:Orange
Efter sortering:
2:Mango
5:Vandmelon
9:Æble
14:Orange
98:Ananas


Java tag