您的位置:首页 > 理论基础 > 数据结构算法

TreeMap TreeSet HashMap HashSet笔记

2017-03-27 17:31 435 查看

TreeMap与TreeSet

TreeMap底层数据结构是red-black tree,节点是一个Entry对象

字段为:          

K key;
V value;
Entry<K,V> left = null;
Entry<K,V> right = null;
Entry<K,V> parent;
boolean color = BLACK;

红黑树的排列是依据key

put() remove() containsKey()方法的效率都是对数级的

注:values()方法的效率是O(n),因为red-black tree是按键排序的,不是按值

TreeSet底层就是一个TreeMap,不过是key和value相等而已

HashMap和HashSet

映射:散列表本质就是把key映射成索引

Hash算法:把key映射城索引的算法就是hash算法,hash算法的好坏决定了索引冲突产生的几率,HashMap的hash方法如下:


final int hash(Object k) {
//一个随机值
int h = hashSeed;
if (0 != h && k instanceof String) {
//如果是key是String类型,就调用该方法
return sun.misc.Hashing.stringHash32((String)k);
}
//如果是其他类型就调用key本身的hashCode()方法
h ^= k.hashCode();

// This function ensures that hashCodesthat differ only by
// constant multiples at each bit positionhave a bounded
// number of collisions (approximately 8 atdefault load factor).
h ^= (h >>> 20) ^ (h>>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}


索引冲突:HashMap处理索引冲突的方法是链式散列,即在Entry中第一一个next的Entry引用,如果有重复的键,就指向重复的Entry,HashMap中Entry字段属性如下:


final K key;
V value;
Entry<K,V> next;
int hash;

Put() remove()  containKey()方法的效率都是常数,containValue()为O(n)(道理同上)

HashSet的底层就是一个HashMap,同样也只是key和value一样而已













                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息