- HashMap就是一张hash表,键和值都没有排序。
- TreeMap以红-黑树结构为基础,键值按顺序排列。
- LinkedHashMap保存了插入时的顺序。
- Hashtable是同步的(而HashMap是不同步的)。所以如果在线程安全的环境下应该多使用HashMap,而不是Hashtable,因为Hashtable对同步有额外的开销。
- HashMap不允许有两个相等的元素存在。默认情况下(也就是类没有实现hashCode()和equals()时),会使用Object类中的这两个方法。Object类中的hashCode()对于不同的对象会返回不同的整数,而只有两个引用指向的同样的对象时equals()才会返回true。
package com.xxx;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class demo006_hashmap {
public static void main(String[] args) {
Dog dog1 = new Dog("red");
Dog dog2 = new Dog("black");
Dog dog3 = new Dog("white");
Dog dog4 = new Dog("white");
HashMap hashMap = new HashMap();
hashMap.put(dog1, 10);
hashMap.put(dog2, 15);
hashMap.put(dog3, 5);
hashMap.put(dog4, 2);
Set set = hashMap.entrySet();
Iterator iterator = set.iterator();
for (; iterator.hasNext(); ){
System.out.println(iterator.next());
}
}
}
class Dog{
String color;
public Dog(String color) {
this.color = color;
}
@Override
public String toString() {
return color + " dog";
}
@Override
public boolean equals(Object o) {
return ((Dog)o).color == this.color;
}
@Override
public int hashCode() {
return color.length();
}
}
运行结果