1.HashMap和Hashtable的区别
- HashMap是非线程安全的,HashTable是线程安全的;HashTable内部的方法基本都经过synchronized修饰
- 因为线程安全的问题,HashMap要比HashTable效率要高一点
- HashMap允许有null值的存在,而在HashTable中put进的键值只要有一个null直接被抛出NullPointerException
2.LinkedHashMap
-
是HashMap的子类,LinkedHashMap使用双向链表来维护key-value的次序
-
treemap是一个红黑树数据结构
-
TreeMap存储key-value时候需要根据key对节点进行排序
-
自然排序:key必须实现comparable接口所有的key必须是同一个对象
3.TreeMap
class R2 implements Comparable{
int count;
public R2(int count){
this.count = count;
}
public String toString()
{
return "R[count:" + count + "]";
}
// 根据equals判断两个对象是否相等
public boolean equals(Object obj){
if(this == obj)
return true;
if(obj != null && obj.getClass() == R2.class)
{
R2 r2 = (R2) obj;
return r2.count == this.count;
}
return false;
}
// 根据count属性值来判断两个对象的大小
@Override
public int compareTo(Object obj) {
R2 r2 = (R2) obj;
return count > r2.count ? 1 : count< r2.count ? -1 : 0;
}
}
public class TreeMapTest {
public static void main(String[] args)
{
TreeMap tm = new TreeMap();
tm.put(new R2(3),"aa");
tm.put(new R2(-5),"bb");
tm.put(new R2(9),"cc");
System.out.println(tm);
}
{R[count:-5]=bb, R[count:3]=aa, R[count:9]=cc}