每日总结,每天进步一点点
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接口下的实现类,都是键值对结构的集合,他们的存放数据和获取数据的方法都是一样的,在这里不做详细的介绍,
希望以上总结对大家有帮助,如果喜欢就支持一下吧,如果有错误请大神赐教。