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参数。
  • 相关阅读:
    浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
    fastjson自由:controller上指定active profile,让你想序列化什么字段就序列化什么字段
    Java多线程中join、yield、sleep方法详解
    一张图秒懂微服务网络架构
    详解SpringBoot应用跨域访问解决方案
    如何在 Spring/Spring Boot 中做参数校验?你需要了解的都在这里!
    史上最全的excel读写技术分享
    手把手教你定制标准Spring Boot starter,真的很清晰
    JVM性能调优详解
    Spring Boot 2.x监控数据可视化(Actuator + Prometheus + Grafana手把手)
  • 原文地址:https://www.cnblogs.com/hzzjj/p/6124961.html
Copyright © 2011-2022 走看看