zoukankan      html  css  js  c++  java
  • Java深入学习23:HashMap和HashTable

    Java深入学习23:HashMap和HashTable

    package interview;
    
    /* *
     *@Description:
     *@Author:TYJ
     *@Date: create in  2020/4/23 7:54
     */
    
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Hashtable;
    
    public class HashMapAndHashTable {
    
        private static String mapKey = "mapKey";
        private static String mapValue = "mapValue";
    
        private static String tableKey = "tableKey";
        private static String tableValue = "tableValue";
    
        public static void test(){
            HashMap<String,Object> map = new HashMap<>();
            Hashtable<String,Object> table = new Hashtable<>();
    
            //1-继承类不同
                //HashMap继承自AbstractMap类。但二者都实现了Map接口。HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>
                //Hashtable继承自Dictionary类,Dictionary类是一个已经被废弃的类。Hashtable<K,V> extends Dictionary<K,V>  implements Map<K,V>
    
            //2-线程安全问题
                //HashMap线程不安全
             //HashTable线程安全
    
            //3-contains方法
                //HashMap是没有contains方法的,而包括containsValue和containsKey方法;
                //hashtable则保留了contains方法,效果同containsValue,还包括containsValue和containsKey方法。
            map.containsKey(mapKey);
            map.containsValue(mapValue);
            table.contains(tableValue);//和containsValue方法相同
            table.containsKey(tableKey);
            table.containsValue(tableValue);
    
            //4-是否允许null;
                //Hashmap是允许key和value为null值的,用containsValue和containsKey方法判断是否包含对应键值对;
                //HashTable键值对都不能为空,否则包空指针异常。
            map.put(null,null);//no error
            //table.put(null,null);//error
    
            //5-扩容方式不同
            //HashMap 哈希扩容必须要求为原容量的2倍,而且一定是2的幂次倍扩容结果,而且当size的值超过75%的时候()每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入;
            //Hashtable扩容为原容量2倍加1;
            try {
                Class<? extends HashMap> mapClass = map.getClass();
                Method capacity = mapClass.getDeclaredMethod("capacity");
                capacity.setAccessible(true);
                System.out.println("capacity: " + capacity.invoke(map) + "; size: " + map.size());
                for(int i = 0; i<12 ; i++){
                    map.put("key"+i,i);
                }
                System.out.println("capacity: " + capacity.invoke(map) + "; size: " + map.size());
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            //6-计算hash值方式不同
            //7-解决hash冲突方式不同(地址冲突)
    
    
        }
    
        public static void main(String[] args) {
            test();
        }
    }

    end

  • 相关阅读:
    PHP基础学习笔记(一)
    安装wampserver之后,浏览器中输入localhost页面显示IIS7解决办法
    HTML5常识总结(一)
    AngularJs中的服务
    AngularJs中的directives(指令part1)
    Happy Number——LeetCode
    Binary Tree Zigzag Level Order Traversal——LeetCode
    Construct Binary Tree from Preorder and Inorder Traversal——LeetCode
    Construct Binary Tree from Inorder and Postorder Traversal——LeetCode
    Convert Sorted Array to Binary Search Tree——LeetCode
  • 原文地址:https://www.cnblogs.com/wobuchifanqie/p/12758362.html
Copyright © 2011-2022 走看看