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

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接口下的实现类,都是键值对结构的集合,他们的存放数据和获取数据的方法都是一样的,在这里不做详细的介绍,

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

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. java分享第七天-01(Hashmap和Hashtable的区别&Property)

    一.Hashmap和Hashtable的区别 1 主要:Hashtable线程安全,同步,效率相对低下 HashMap线程不安全,非同步,效率相对高 2 父类:Hashtable是Dictionary ...

  4. HashMap和Hashtable的区别 源码分析

    一:以前只知道HashMap和HashTable区别,死记硬背的记住HashMap 允许key value为空 而Hashtable 不允许为空 HashMap线程是非线程安全的,而Hashtable ...

  5. Java 集合系列 11 hashmap 和 hashtable 的区别

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  6. HashMap与HashTable的区别、HashMap与HashSet的关系

    http://blog.csdn.net/wl_ldy/article/details/5941770 HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是 ...

  7. 面试题·HashMap和Hashtable的区别(转载再整理)

    原文链接: Javarevisited 翻译: ImportNew.com- 唐小娟 译文链接: http://www.importnew.com/7010.html HashMap和Hashtabl ...

  8. java中的hashmap与hashtable的区别

    HashMap和Hashtable的区别 HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别.主要的区别有:线程安全性,同步(synchronizatio ...

  9. HashMap和Hashtable的区别--List,Set,Map等接口是否都继承自Map接口--Collection和Collections的区别

    面试题: 1.HashMap和Hashtable的区别? HashMap:线程不安全,效率高,键和值都允许null值 Hashtable:线程安全,效率低,键和值都不允许null值 ArrayList ...

随机推荐

  1. Angularjs -Promise - $http

    https://www.peterbe.com/plog/promises-with-$http

  2. oracle中临时表是用来做什么的

    oracle中临时表是用来做什么的 某些情况下, 需要 多个非常大的表关联的情况下, 但是需要检索的, 是少量的数据的时候.可以先把 大表的数据, 检索出那一小部分, 然后插入到 临时表中, 最后再关 ...

  3. bootstrap开发一个简单网页。

    CSS代码: body{        padding-top: 50px;        padding-bottom: 50px;        overflow: auto!important; ...

  4. Manage Metadata Service Error: There are no addresses available for this application

    打开正常创建的Metadata Service后发现了如下的错误: 检查了Application Pool和Managed Metadata Web  Service ,发现两者一切正常,之后查看Sh ...

  5. Couldn't open CUDA library cublas64_80.dll etc. tensorflow-gpu on windows

    I c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\dso_load ...

  6. JavaWeb学习笔记——过滤器

    JSP可以完成的功能Servlet都可以完成,但是Servlet具备的很多功能是JSP所不具备的. 从使用上来看,Servlet可以分成简单Servlet.过滤Servlet(过滤器)和监听Servl ...

  7. ADB

    adb logcat 命令详解 log过滤 http://blog.csdn.net/liao277218962/article/details/50129009 如何使用 adb logcat 查看 ...

  8. Git on Windows 一些问题

    问题汇总 1. 卸载Git时,bin和usr目录删不掉 报错:bin, usr目前需要admin权限删除,或者这个目录被其他文件引用 打开taskmgr,找到所有引用 git/bin/ 下的文件的进程 ...

  9. [Algorithm] 机器学习算法常用指标总结

    考虑一个二分问题,即将实例分成正类(positive)或负类(negative).对一个二分问题来说,会出现四种情况.如果一个实例是正类并且也被 预测成正类,即为真正类(True positive), ...

  10. ps命令

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...