Terry.Li-彬

虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  143 随笔 :: 344 文章 :: 130 评论 :: 0 Trackbacks

HashMap / HashTable / HashSet

HashTable 与 HashMap:
 
          表面:
                  HashTable不允许null(keyvalue都不可以),HashMap允许null(keyvalue都可以)
          HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像VectorArrayList一样。
          HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。
          HashTable使用EnumerationHashMap使用Iterator
   
      内部:
          HashTablehash数组默认大小是11,增加的方式是 old*2+1HashMaphash数组的默认大小是16,而且一定是2的指数。
         
          哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
              int hash = key.hashCode();
                  int index = (hash & 0x7FFFFFFF) % tab.length;

              HashMap重新计算hash值,而且用与代替求模:
             int hash = hash(k);
                  int i = indexFor(hash, table.length);

                  static int hash(Object x) {
               int h = x.hashCode();
                      
h += ~(h << 9);
              h ^= (h >>> 14);
              h += (h << 4);
              h ^= (h >>> 10);
              return h;
                 }

                 static int indexFor(int h, int length) {
              return h & (length-1);
                }

  HashSet 、 HashMap:

           HashMap可以看作三个视图:keySetvalueCollectionEntrySet这里HashSet就是其实就是HashMap的一个视图。HashSet内部就是使用Hashmap实现的,和Hashmap不同的是它不需要KeyValue两个值。
        

        往hashset中插入对象其实只不过是内部做了

              public boolean add(Object o) {

                    return map.put(o, PRESENT)==null;
             
}

        往hashset中插入对象其实只不过是内部做了

              public boolean add(Object o) {

                    return map.put(o, PRESENT)==null;
             
}

            
     HashMap为散列映射,它是基于hash table的一个实现,它可在常量时间内安插元素,或找出一组key-value pair.

     HashSet为散列集,它把查找时间看的很重要,其中所有元素必须要有hashCode()


posted on 2007-11-24 15:07 礼物 阅读(4906) 评论(2)  编辑  收藏

评论

# re: HashMap 、HashTable、HashSet的区别 2008-09-17 22:30 地方
我是外行 看不懂  回复  更多评论
  

# re: HashMap 、HashTable、HashSet的区别 [未登录] 2010-06-03 10:51
还是应该带着问题去思考比较好。因为人之间总有共性,能够思考同样的事情.虽然有的观察不到,但是事物之间确实有联系。

对于性能不仅与数量还和质量 战略 运气有关 运气其实是没有考虑人为因素的带来的随机性  回复  更多评论
  


只有注册用户登录后才能发表评论。

网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问