简介

Map是一种接口,实现类有 hashMap

SortedMap是继承自Map的接口,实现类为TreeMap,在内部会对Key进行排序

遍历Map

  • 使用for each循环遍历Map实例的keySet()方法返回的Set集合,它包含不重复的key的集合:

    import java.util.HashMap;
    import java.util.Map; public class Main {
    public static void main(String[] args) {
    Map<String, Integer> map = new HashMap<>();
    map.put("apple", 123);
    map.put("pear", 456);
    map.put("banana", 789);
    for (String key : map.keySet()) {
    Integer value = map.get(key);
    System.out.println(key + " = " + value);
    }
    }
    }
  • 同时遍历keyvalue可以使用for each循环遍历Map对象的entrySet()集合,它包含每一个key-value映射:

    import java.util.HashMap;
    import java.util.Map; public class Main {
    public static void main(String[] args) {
    Map<String, Integer> map = new HashMap<>();
    map.put("apple", 123);
    map.put("pear", 456);
    map.put("banana", 789);
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println(key + " = " + value);
    }
    }
    }

遍历Map时,不可假设输出的key是有序的!

TreeMap

TreeMap不使用equals()hashCode(),不用对这两个方法进行覆写

TreeMap的key要求

使用TreeMap时,放入的Key必须实现Comparable接口。

StringInteger这些类已经实现了Comparable接口,因此可以直接作为Key使用。作为Value的对象则没有任何要求。

如果作为Key的class没有实现Comparable接口,那么,必须在创建TreeMap时同时指定一个自定义排序算法:

TreeMap在比较两个Key是否相等时,依赖Key的

  • compareTo()方法(key这个类需要实现Comparable接口,覆写compareTo方法)参考 或者

  • Comparator.compare()方法。

将自定义的class作为key

例1:创建的时候传入 Comparator.compare()方法:

注意到Comparator接口要求实现一个比较方法,它负责比较传入的两个元素a和b,

  • 如果a<b,则返回负数,通常是-1,

  • 如果a==b,则返回0,

  • 如果a>b,则返回正数,通常是1。

    TreeMap内部根据比较结果对Key进行排序。

例3:在key这个类里面实现Comparable接口,覆写compareTo方法

import java.util.*;

public class Test {
public static void main(String[] args) {
Map<Student, Integer> map = new TreeMap<>(); map.put(new Student("Tom", 77), 1);
map.put(new Student("Bob", 66), 2);
map.put(new Student("Lily", 99), 3);
for (Student key : map.keySet()) {
System.out.println(key);
}
System.out.println(map.get(new Student("Bob", 66))); // null?
}
} class Student implements Comparable<Student> {
public String name;
public int score;
Student(String name, int score) {
this.name = name;
this.score = score;
} @Override
public int compareTo(Student o) {
Student p = (Student) o;
if (this.score == p.score) {
return 0;
}
return this.score < p.score ? -1 : 1;
} public String toString() {
return String.format("{%s: score=%d}", name, score);
}
}

小结

  • SortedMap在遍历时严格按照Key的顺序遍历,最常用的实现类是TreeMap
  • 作为SortedMap的Key必须实现Comparable接口,或者传入Comparator
  • 要严格按照compare()规范实现比较逻辑,否则,TreeMap将不能正常工作。

最新文章

  1. 值得注意的ibatis动态sql语法格式
  2. python学习笔记-(十五)RabbitMQ队列
  3. 关于this,super的来源猜想
  4. OC之0801
  5. strcat函数造成的段错误(Segmentation fault)
  6. 网站seo新手快速提升自己的技巧
  7. Java的哪些事
  8. Hibernate 关联关系映射实例
  9. bash基础知识
  10. ElasticSearch(1)-入门
  11. 10分钟精通SharePoint-搜索
  12. &lt;jsp:include&gt;和&lt;%@include%&gt;的区别
  13. 炫酷:一句代码实现标题栏、导航栏滑动隐藏。ByeBurger库的使用和实现
  14. 人类创造未来的思想先锋:这些 TED 演示深深震撼着我们
  15. Android开发学习之路--MAC下Android Studio开发环境搭建
  16. 电梯调度二——曹玉松&amp;&amp;蔡迎盈
  17. Django教程01-全流程
  18. vs编译过程中出的错
  19. js 实现动态时间
  20. 【Linux】top命令

热门文章

  1. Python2.7错误处理FileNotFoundError报错NameError: name &#39;FileNotFoundError&#39; is not defined
  2. Docker实战之Consul集群
  3. Python几个简单实用的模块
  4. YAML语法使用,JSR303数据校验
  5. 《javascript高级程序设计》笔记:文档模式
  6. Sketchup二次开发教程
  7. GitHub 热点速览 vol.10:疫情下的 GitHub
  8. Nuxt简单使用Google/Baidu Analyze
  9. js中所有函数的参数(按值和按引用)都是按值传递的,怎么理解?
  10. go学习第五天、运算符