1. 还有一种Map,它在内部会对Key进行排序,这种Map就是SortedMap。注意到SortedMap是接口,它的实现类是TreeMap

    image.png

    1. SortedMap保证遍历时以Key的顺序来进行排序。例如,放入的Key是"apple""pear""orange",遍历的顺序一定是"apple""orange""pear",因为String默认按字母排序:

      1. public class TreeMapTest {
      2. public static void main(String[] args) {
      3. Map<String, Integer> map = new TreeMap<>();
      4. map.put("orange", 1);
      5. map.put("apple", 2);
      6. map.put("pear", 3);
      7. for (String key:map.keySet()){
      8. System.out.println(key);
      9. }
      10. }
      11. }
    2. 使用TreeMap时,放入的Key必须实现Comparable接口。如果作为Key的class没有实现Comparable接口,那么,必须在创建TreeMap时同时指定一个自定义排序算法: ```java public class Main { public static void main(String[] args) {

      1. Map<Person, Integer> map = new TreeMap<>(new Comparator<Person>() {
      2. public int compare(Person p1, Person p2) {
      3. return p1.name.compareTo(p2.name);
      4. }
      5. });
      6. map.put(new Person("Tom"), 1);
      7. map.put(new Person("Bob"), 2);
      8. map.put(new Person("Lily"), 3);
      9. for (Person key : map.keySet()) {
      10. System.out.println(key);
      11. }
      12. // {Person: Bob}, {Person: Lily}, {Person: Tom}
      13. System.out.println(map.get(new Person("Bob"))); // 2

      } }

    class Person { public String name; Person(String name) { this.name = name; } public String toString() { return “{Person: “ + name + “}”; } } `` 注意到Person类并未覆写equals()hashCode(),因为TreeMap不使用equals()hashCode()`。