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
}
});
京公网安备 11010502036488号