hash

来源:互联网 发布:布艺沙发品牌知乎 编辑:程序博客网 时间:2024/05/16 06:46

  hash_map是一个聚合类,它继承自_Hash类,包括一个vector,一个list和一个pair,其中vector用于保存桶,list用于进行冲突处理,pair用于保存key->value结构,简要地伪码如下:

[cpp] view plaincopy
  1.  class hash_map<class _Tkey, class _Tval>  
  2. {  
  3. private:  
  4.     typedef pair<_Tkey, _Tval> hash_pair;  
  5.     typedef list<hash_pair>    hash_list;  
  6.     typedef vector<hash_list>  hash_table;  
  7. };  

HashMap/Hashtable 和 Vector/ArrayList 都是放一组对象,一个是用key object来定位element, 另一个是用index定位element. 
推荐使用HashMap和ArrayList的原因一样,因为他们不是Synchronized,因为不需要obtain lock each time,它们相对快很多。Synchronized在最底层是没有意义的,在这里不想多讲。 
我本人更加推荐是用LinkedList而不是 ArrayList.因为在更多的时候,我们很少真的从一个List里拿出某一个element,相对的,遍例整个List的情况最多,在这种情况下用 Iterator是最高效的。 
Vector是一个一维的容器。HashTable、HashMap都是二维的。 


哈希表由数组+链表组成,一个长度为16的数组中,每个元素存储的是一个链表的头结点。而HashMap和Hashtable就是哈希表结构。
0 0