zoukankan      html  css  js  c++  java
  • 关于HashMap和Hashtable的区别

    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的指数。

  • 相关阅读:
    python之简单窗口
    hdu1237简单计算器
    BST二叉查找树的实现与操作
    huffman树入门
    hdu2043密码
    hdu1870愚人节的礼物
    hdu 2085 核反应堆
    hdu 2066 一个人的旅行(Dijkstra求最短路问题)
    hdu 2063 过山车 (二分匹配)
    hdu 2067 小兔的棋盘(Catalan数)
  • 原文地址:https://www.cnblogs.com/41ZZY/p/5360757.html
Copyright © 2011-2022 走看看