HashMap: 通过key计算hashcode()找出value所在的index - 效率很高

内部key是无序的@@
详情见 HashMap讲解,equals(),hashcode()编写

EnumMap:如果key是Enum类,推荐用这个:

内部以一个非常紧凑的数组存储value,并且根据enum类型的key直接定位到内部数组的索引,并不需要计算hashCode(),不但效率最高,而且没有额外的空间浪费。

    enum DayOfWeek{
    Monday,Tuesday, Wednesday,Thursday,Friday,Saturday,Sunday
  }


    public static void main(String[] args) {

    Map<DayOfweek,String> map=new EnumMap<DayOfweek, String>(DayOfWeek.class);//这里为什么有DayOfWeek.class 是因为泛型擦拭
    map.put(DayOfweek.Monday,"Monday");
    map.put(DayOfweek.Tuesday,"Tuesday");
    map.put(DayOfweek.Wednesday,"Wednesday");
    map.put(DayOfweek.Thursday,"Thursday");
    System.out.println(map.get(DayOfweek.Wednesday));
  }

TreeMap:接口为SortedMap

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

public class Main {
  public static void main(String[] args){
    Map<String,Integer> map=new TreeMap<>();
    map.put("first",1);
    map.put("second",2);
    for (String key:map.keySet()){
      System.out.println(key);
    }
  }
}

如果你的key不是String,需要写Comparator<>,在HashMap内部用equals比较,TreeMap内部用compareTo比较

        Map<Person, Integer> map = new TreeMap<>(new Comparator<Person>() {
            public int compare(Person p1, Person p2) {
                return p1.name.compareTo(p2.name);//如果a<b,则返回负数,通常是-1,如果a==b,则返回0,如果a>b,则返回正数,通常是1 - 可以看作a-b
            }
        });