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. Alpha冲刺! Day8 - 砍柴

    Alpha冲刺! Day8 - 砍柴 今日已完成 晨瑶:写了部分gitkraken团队协作教程:讨论关于继承baseActivity因为需要参数无法通过override去实现函数,并且initData ...

  2. 让zepto支持slideup(),slidedown()

    zepto不支持slideup()和slidedown():使用以下方法可以支持该功能 <div class="slide"> <p> zepto不支持sl ...

  3. [HAOI2017]供给侧改革

    题目 这道题我们其实就是利用了一棵后缀树 由于字符串是随机的,所以这个后缀树的树高是\(log\)的,基于树高的算法是能过的 我们考虑后缀树上的两个节点的\(lca\)就是这两个节点所代表的后缀的\( ...

  4. 使用python制作时间戳转换工具

    使用python制作时间戳转换工具 python 时间戳转日期 日期转时间戳 前言:作为一个程序员一般情况下,json和时间戳是常用的两个工具,我咨询过很多个朋友,他们一般都是通过在线工具对json进 ...

  5. cryptopunks的代码解释

    1.imageHash就是将punk所有图像合在一起的那张图punks.png进行hash得到一个值,并将该值存储到链上,用处就是你可以通过将图像hash然后跟该值对比看图像对不对.这就是它的用处,在 ...

  6. 3150luogu洛谷

    若说代码 那真的是很水 但是 思想却有点意思 这道题是洛谷博弈论专题的第一道入门题, 然而刚开始我是不会做的, 毕竟是道入门题, 我博弈论还没入门呢. 这道题的做法就是: 如果m为偶数, 那么先手赢( ...

  7. hibernate4使用原生jdbc进行批处理

    在hibernate中,有一级缓存session和二级缓存sessionFactory这些机制,一方面为编码提供了便利,同时也会有一些副作用.比如有较大的数据量交互的话,缓存反而会降低效率.最近在做一 ...

  8. D. Mister B and PR Shifts

    ;//开两倍空间 int n; arr p,cnt; int l,r,m; ll sum = ,ans; int main() { // file("test"); sdf(n); ...

  9. php实现一个简单的四则运算计算器

    php实现一个简单的四则运算计算器(还不支持括号的优先级).利用栈这种数据结构来计算表达式很赞. 这里可以使用栈的结构,由于php的数组“天然”就有栈的特性,这里直接就利用了数组.当然可以使用栈结构写 ...

  10. BAT特殊字符

    BAT特殊字符1. 点 与echo连用,作用是换行 示例1 [输出空行] echo. 2 > 定向符[输出] 将命令的输出进行重定向 [一般用于将结果写入文件] 注意 nul 为空设备 > ...