zoukankan      html  css  js  c++  java
  • hashMap和hashTable的区别

    每日总结,每天进步一点点

    hashMap和hashTable的区别

      1.父类:hashMap=》AbstractMap

          hashTable=》Dictionary

      2.性能:hashMap:线程不安全,非同步,效率高

          hashTable:线程安全,同步,效率低

      3.存储特性:hashMap:key可以有一个为null,值可以有多个为空

            hashTable:key和value都不能为null

    补充知识WeakHashMap,IdentityHashMap,EnumMap

      WeakHashMap:

        在说这个类之前,首先普及一下java的引用类型

        java中引用类型分为四种:

        1.强引用:引用指向对象,垃圾回收器(gc)不会进行回收

        2.软引用:运时可能被回收(jvm内存不足)

        3.弱引用:运行时一定被回收

        4.虚引用:类似于无引用,主要用于跟踪对象的回收状态

        接下来咱们继续看WeakHashMap这个类

        WeakHashMap这个类的key键值为弱引用,垃圾回收器运行时将被回收,主要用于大量数据在使用结束之后需要及时进行内存回收处理

        事例代码:

         WeakHashMap< String, String> weakMap = new WeakHashMap<String, String>();
            weakMap.put(new String("a1"), "abc");
            weakMap.put(new String("a2"), "def");
            weakMap.put("a3", "ghi");
            //垃圾回收器运行
            System.gc();
            System.runFinalization();
            //输出集合的长度
            System.out.println(weakMap.size());

        运行结果为:1

        前两条数据已经被回收,最后一条为强类型,不会进行回收

        

      IdentityHashMap

        这个类的key值存放的是对象的引用,不是对象的值

        事例代码:

        

         IdentityHashMap<String, String> map = new IdentityHashMap<String, String>();
            map.put("a1", "aaa");
            map.put(new String("a1"), "bbb");
            map.put(new String("a1"), "ccc");
            
            System.out.println(map.size());

        运行结果:3,此时的三条数据的key值是不重复的

      

      EnumMap

        EnumMap:这个类的key值是一个枚举类型

        事例代码:

        

        EnumMap<demo, String> enum1 = new EnumMap<demo, String>(demo.class);
            
            enum1.put(demo.a1, "a1");
            enum1.put(demo.a2,"a2");
            System.out.println(enum1.size());
            for (Map.Entry<demo, String> map1 : enum1.entrySet()) {
                System.out.println(map1.getKey()+" " + map1.getValue());
            }
    //创建一个枚举类型
    enum demo{ a1,a2,a3,a4; }

        

      总结:

        以上所有的类都是Map接口下的实现类,都是键值对结构的集合,他们的存放数据和获取数据的方法都是一样的,在这里不做详细的介绍,

      希望以上总结对大家有帮助,如果喜欢就支持一下吧,如果有错误请大神赐教。

  • 相关阅读:
    [Xcode 实际操作]九、实用进阶-(2)遍历设备(输出系统)上的所有字体
    [Xcode 实际操作]九、实用进阶-(1)隐藏顶部的状态栏
    [Xcode 实际操作]八、网络与多线程-(25)实现ShareSdk的社会化分享功能
    [Xcode 实际操作]八、网络与多线程-(24)社会化分享功能开发包的安装和配置:微信、QQ、微博
    [Xcode 实际操作]八、网络与多线程-(23)多线程的同步与异步的区别
    Moving Tables-贪心
    HTTP状态码
    CSS3中transform,transition和animation的简单介绍和使用方法演示样例
    用NODEJS处理EXCEL文件导入导出,文件上传
    内存区域划分
  • 原文地址:https://www.cnblogs.com/zbrave/p/6227979.html
Copyright © 2011-2022 走看看