zoukankan      html  css  js  c++  java
  • HashMap 与 HashTable的区别

    1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。可以用synchronized实现HashMap的同步,可是会增加了很多处理费用,效率上HashMap要高点

    2.HashTable不允许null值,key和value都不可以,HashMap允许null值,key和value都可以。HashMap允许 key值只能由一个null值,因为hashmap如果key值相同,新的key, value将替代旧的。

    3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。

    4.HashTable使用Enumeration,HashMap使用Iterator。Hashtable仅仅比HashMap多一个elements方法。

    1. Enumeration em = table.elements();  
    2. while (em.hasMoreElements()) {  
    3. String obj = (String) em.nextElement();  
    4. System.out.println(obj);   
    5. }

    5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

    6.哈希值的使用不同,HashTable直接使用对象的hashCode。

      Hashtable直接使用对象的hashCode,代码是这样的:

      1. int hash = key.hashCode();  
      2. int index = (hash & 0x7FFFFFFF) % tab.length; 

      而HashMap重新计算hash值,而且用与代替求模:

      1. int hash = hash(k);  
      2. int i = indexFor(hash, table.length);  
      3.   
      4. static int hash(Object x) {  
      5.   int h = x.hashCode();  
      6.   
      7.   h += ~(h << 9);  
      8.   h ^= (h >>> 14);  
      9.   h += (h << 4);  
      10.   h ^= (h >>> 10);  
      11.   return h;  
      12. }  
      13.   
      14. static int indexFor(int h, int length) {  
      15.   return h & (length-1); 
      关于Properties

      有时侯,你可能想用一个hashtable来映射key的字符串到value的字符串。DOS、Windows和Unix中的环境字符串就有一些例子,如key的字符串PATH被映射到value的字符串C:WINDOWS;C:WINDOWSSYSTEM。Hashtables是表示这些的一个简单的方法,但Java提供了另外一种方法。
      
    Java.util.Properties类是Hashtable的一个子类,设计用于String keys和values。Properties对象的用法同Hashtable的用法相象,但是类增加了两个节省时间的方法,你应该知道。
      
    Store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中。Load()方法正好相反,用来读取文件,并设定Properties对象来包含keys和values。
      
    注意,因为Properties扩展了Hashtable,你可以用超类的put()方法来添加不是String对象的keys和values。这是不可取的。另外,如果你将store()用于一个不包含String对象的Properties对象,store()将失败。作为put()和get()的替代,你应该用setProperty()和getProperty(),它们用String参数。
  • 相关阅读:
    剑指offer-二叉树的深度
    剑指offer-二叉树中和为某一值的路径
    剑指offer-数组中只出现一次的数字
    剑指offer-反转单词顺序列
    剑指offer-数字在排序数组中出现的次数
    剑指offer-第一个只出现一次的字符
    剑指offer-连续子数组的最大和
    剑指offer-数组中的逆序对
    CSS3滚动条美化,CSS3滚动条皮肤
    mouseover事件与mouseenter事件的区别
  • 原文地址:https://www.cnblogs.com/hzzjj/p/6124961.html
Copyright © 2011-2022 走看看