Hashtable的应用非常广泛,HashMap是新框架中用来代替Hashtable的类,也就是说建议使用HashMap,不要使用Hashtable。可能你觉得Hashtable很好用,为什么不用呢?这里简单分析他们的区别。

1.Hashtable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。

查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized 关键字,而HashMap的源代码中则连 synchronized 的影子都没有,当然,注释除外。

2.Hashtable不允许 null 值(key 和 value 都不可以),HashMap允许 null 值(key和value都可以,但是key只能有一个为空)。

3,关于两者的遍历方式大同小异,Hashtable仅仅比HashMap多一个elements方法。

/**a test for Hashtable values can or not be null**/
public class Test {
    public static void main(String[]args){
        Hashtable<String,String> table=new Hashtable<String,String>();
        table.put("a-key","a-values");
        table.put("b-key","b-values");
        table.put("c-key","c-values");
        //table.put("d-key",null);//java.lang.NullPointerException
        //System.out.print(table);
        /**用values的方式遍历**/
        Collection zzy=table.values();
        Iterator it=zzy.iterator();
        while(it.hasNext()){
            String obj=(String)it.next();
            System.out.println(obj);
        }
        /**用entrySet的方式遍历**/
        Set set = table.entrySet();  
        Iterator its = set.iterator();  
        while (its.hasNext()) {  
        Entry entry = (Entry) its.next();  
        System.out.println(entry.getKey() + " - " + entry.getValue()); 
        }  
    }
}

/**a test for HashMap values can or not be null**/
public class Test1 {
        public static void main(String[]args){
            HashMap<String,String> table=new HashMap<String,String>();
            table.put("a-key","a-values");
            table.put("b-key","b-values");
            table.put("c-key","c-values");
            table.put(null,null);
            table.put("d-key",null);//java.lang.NullPointerException
            //System.out.print(table);
            /**用values的方式遍历**/
            Collection zzy=table.values();
            Iterator it=zzy.iterator();
            while(it.hasNext()){
                String obj=(String)it.next();
                System.out.println(obj);
            }
            /**用entrySet的方式遍历**/
            Set set = table.entrySet();  
            Iterator its = set.iterator();  
            while (its.hasNext()) {  
            Entry entry = (Entry) its.next();  
            System.out.println(entry.getKey() + " - " + entry.getValue());  
              
            }  
        }
}

4.HashTable使用Enumeration,HashMap使用Iterator

以下这两点是从内部实现机制上来进行比较

5.哈希值的使用不同

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

关于HashMap和Hashtable的区别的更多相关文章

  1. java面试题——HashMap和Hashtable 的区别

    一.HashMap 和Hashtable 的区别 我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Clonea ...

  2. Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、

    特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣)                       ...

  3. hashMap和hashTable的区别

    每日总结,每天进步一点点 hashMap和hashTable的区别 1.父类:hashMap=>AbstractMap hashTable=>Dictionary 2.性能:hashMap ...

  4. java分享第七天-01(Hashmap和Hashtable的区别&Property)

    一.Hashmap和Hashtable的区别 1 主要:Hashtable线程安全,同步,效率相对低下 HashMap线程不安全,非同步,效率相对高 2 父类:Hashtable是Dictionary ...

  5. HashMap和Hashtable的区别 源码分析

    一:以前只知道HashMap和HashTable区别,死记硬背的记住HashMap 允许key value为空 而Hashtable 不允许为空 HashMap线程是非线程安全的,而Hashtable ...

  6. Java 集合系列 11 hashmap 和 hashtable 的区别

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  7. HashMap与HashTable的区别、HashMap与HashSet的关系

    http://blog.csdn.net/wl_ldy/article/details/5941770 HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是 ...

  8. 面试题·HashMap和Hashtable的区别(转载再整理)

    原文链接: Javarevisited 翻译: ImportNew.com- 唐小娟 译文链接: http://www.importnew.com/7010.html HashMap和Hashtabl ...

  9. java中的hashmap与hashtable的区别

    HashMap和Hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别.主要的区别有:线程安全性,同步(synchronizatio ...

  10. HashMap和Hashtable的区别--List,Set,Map等接口是否都继承自Map接口--Collection和Collections的区别

    面试题: 1.HashMap和Hashtable的区别? HashMap:线程不安全,效率高,键和值都允许null值 Hashtable:线程安全,效率低,键和值都不允许null值 ArrayList ...

随机推荐

  1. 2018-2019-2 网络对抗技术 20165318 Exp1 PC平台逆向破解

    实验模块 (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻击,改变程序执行流: (三)注入Shellcode并执行: 实验准备 设置共享文件夹(这一步我已经在之前安 ...

  2. Http实现文件下载

    HttpServlet实现下载文件,重要的设置header,否则浏览器无法解析为下载. Header示例: 1:response.setContentType("application/pd ...

  3. 【JDK和Open JDK】平常使用的JDK和Open JDK有什么区别(转)

    文章转自https://www.cnblogs.com/sxdcgaq8080/p/7487369.html 注意到这个问题,是在CentOS7上安装JDK的时候,查找相关的资料,发现安装JDK之前都 ...

  4. leetcode 131. Palindrome Partitioning 、132. Palindrome Partitioning II

    131. Palindrome Partitioning substr使用的是坐标值,不使用.begin()..end()这种迭代器 使用dfs,类似于subsets的题,每次判断要不要加入这个数 s ...

  5. Hibernate validator使用和自定义validator及整合Spring MVC

    http://blog.csdn.net/lwphk/article/details/43983669 Hibernate validator使用 导入validation-api-xxx.jar 以 ...

  6. https安全协议原理

    那么什么是HTTPS? HTTPS(Hypertext Transfer Protocol Secure)是一种通过计算机网络进行安全通信的传输协议.HTTPS经由HTTP进行通信,但利用TLS来加密 ...

  7. IDEA Maven Jetty Jrebel 热部署

    准备:1.下载Jrebel的离线安装包,版本是6.4.3版本.            2.下载Jrebel的破解补丁包,同样也是针对6.4.3版本的 Jrebel离线安装包官网下载地址:https:/ ...

  8. 软概(lesson 2):课堂测试

    一.测试题目 二.完成过程 1.设计思想 ①连接mysql数据库 ②设计user类,增加参数 ③设计add类,向数据库内增加内容 ④设计addInput页面,完成录入操作 ⑤设计add页面,接收录入的 ...

  9. SkylineGlobe 如何实现二次开发加载KML文件

    示例代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  10. 源码篇:Python 实战案例----银行系统

    import time import random import pickle import os class Card(object): def __init__(self, cardId, car ...