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
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 } });