如何使用键降序对哈希映射进行排序

时间:2015-06-15 10:33:36

标签: java

如何使用键降序对哈希映射进行排序。请举例说明。 以及对哈希映射进行排序的方法有多少。 请详细说明

5 个答案:

答案 0 :(得分:12)

HashMap不支持排序。它们根据键的hashCode值将条目存储在存储桶中,它们如何看待它是否合适。它们适用于存储事物并在事后查找它们,但不适合迭代它们的内容(这是你显然想做的事情),因为你不能依赖它们的顺序并且迭代它通常很昂贵。

请尝试使用TreeMap。您可以指定一个自定义比较器,它只执行默认比较器的反转。在这种情况下,您的参赛作品将以降序顺序排序。 Collections.reverseOrder会为你创建一个比较器,你可以像这样使用它:

new TreeMap<Integer, String>(Collections.reverseOrder());

答案 1 :(得分:3)

实现此目的的两种方法:

  1. 使用 HashMap

    .third {
      position: relative;
      z-index: 100;
      width: 100%;
      background-color: #F7F7F7;
    }
    
    .basic-container {
      width: 70%;
      margin: 0 auto;
      text-align: justify;
    }
    
    .contact {
      position: relative;
      width: 49%;
      height: 0;
      display: inline-block;
      padding-bottom: 60%;
    }
    
    .contact p.lead {
      text-align: left;
    }
    
    #map {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%
    }
    
  2. 使用树形图,编写自己的public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); map.put("A", 34); map.put("B", 25); map.put("C", 50); map.put("D", 50); // "duplicate" value System.out.println(entriesSortedByValues(map)); } static <K, V extends Comparable<? super V>> List<Entry<String, Integer>> entriesSortedByValues(Map<String, Integer> map) { List<Entry<String, Integer>> sortedEntries = new ArrayList<Entry<String, Integer>>(map.entrySet()); Collections.sort(sortedEntries, new Comparator<Entry<String, Integer>>() { @Override public int compare(Entry<String, Integer> e1, Entry<String, Integer> e2) { return e2.getKey().compareTo(e1.getKey()); } }); return sortedEntries; }

    Comparator

答案 2 :(得分:3)

我建议使用Java 8中包含的此方法。

List<Map.Entry<String, Integer>> sorted_map =
                map_1.entrySet()
                .stream()
                .sorted(reverseOrder(Map.Entry.comparingByKey()))
                .collect(Collectors.toList());

此处'map_1'是您要排序的地图。

现在您可以使用sorted_map变量进行迭代并用于您的目的。

请务必:

import static java.util.Collections.reverseOrder;

答案 3 :(得分:0)

  

试试此代码

public class MapUsingSort {
public static void main(String[] args) {

Map<Integer, String> abc = new HashMap<>();
abc.put(3, "a");
abc.put(6, "b"); 
abc.put(1, "c");
abc.put(4, "h");
abc.put(10, "k");
abc.put(9, "x");

 // Map is stored in ArrayList
List<Entry<Integer,String>> sortedEntries = new 
ArrayList<Entry<Integer,String>>(abc.entrySet());


Collections.sort(sortedEntries, new Comparator<Entry<Integer,String>>() {
 @Override
 public int compare(Entry<Integer, String> a, Entry<Integer, String> b) 
 {
    //Sorting is done here make changes as per your need 
    // swap a and b for descending order in return statement 

    return a.getKey().compareTo(b.getKey());   
 }
});

 for (Object object : sortedEntries) {

  //print your data in your own way
  System.out.println((Map.Entry)object);
  }
 }
}

答案 4 :(得分:-2)

SELECT
  field1,
  field2,
  field3
FROM
  table1
AND
  table2
WHERE
  condition;