# 如何在 java 中按值对`TreeMap`进行排序

> 原文： [https://beginnersbook.com/2014/07/how-to-sort-a-treemap-by-value-in-java/](https://beginnersbook.com/2014/07/how-to-sort-a-treemap-by-value-in-java/)

[`TreeMap`](https://beginnersbook.com/2013/12/treemap-in-java-with-example/)总是根据其键进行排序，但是如果你想根据它的值对它进行排序，那么你可以使用比较器来构建一个逻辑。下面是按值排序`TreeMap`的完整代码。

```java
import java.util.*;

class TreeMapDemo {
  //Method for sorting the TreeMap based on values
  public static <K, V extends Comparable<V>> Map<K, V> 
    sortByValues(final Map<K, V> map) {
    Comparator<K> valueComparator = 
             new Comparator<K>() {
      public int compare(K k1, K k2) {
        int compare = 
              map.get(k1).compareTo(map.get(k2));
        if (compare == 0) 
          return 1;
        else 
          return compare;
      }
    };

    Map<K, V> sortedByValues = 
      new TreeMap<K, V>(valueComparator);
    sortedByValues.putAll(map);
    return sortedByValues;
  }
  public static void main(String args[]) {

    TreeMap<String, String> treemap = new TreeMap<String, String>();

    // Put elements to the map
    treemap.put("Key1", "Jack");
    treemap.put("Key2", "Rick");
    treemap.put("Key3", "Kate");
    treemap.put("Key4", "Tom");
    treemap.put("Key5", "Steve");

    // Calling the method sortByvalues
    Map sortedMap = sortByValues(treemap);

    // Get a set of the entries on the sorted map
    Set set = sortedMap.entrySet();

    // Get an iterator
    Iterator i = set.iterator();

    // Display elements
    while(i.hasNext()) {
      Map.Entry me = (Map.Entry)i.next();
      System.out.print(me.getKey() + ": ");
      System.out.println(me.getValue());
    }
  }
}
```

**输出：**

```java
Key1: Jack
Key3: Kate
Key2: Rick
Key5: Steve
Key4: Tom
```