都实现了Map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值。

1.初始化的时候:HashTable在不指定容量的情况下的默认容量是11,且不要求底层数组的容量一定要为2的整数次幂;HashMap默认的容量为16,且要求容量一定为2的整数次幂。

2.HashTable,HashMap具有无须特性。TreeMap是利用红黑树实现的,实现了SortMap接口,能够根据保存的键的记录进行排序。所以需要使用排序则选择TreeMap,默认为升序排序,可通过实现Comparator自定义排序方式

3.HashTable的key,value都不能为null;HashMap中的key,value可以为null,但是只有一个key为null的键值对,但是允许有多个值为null的键值对;TreeMap中当没有实现Comparator接口时,key不可以为null;当实现Comparator接口时,若未对null情况进行判断,则key不可以为null.

4.HashTable其方法函数都是同步的,因此保证了线程的安全性。因为同步的关系,在多线程环境下,当一个线程访问HashTable的同步方法时,其他线程访问同步方法就会进入阻塞状态,大大的降低了程序的运行的效率,因此被废弃,不推荐使用。

HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,会导致数据的不一致。如果需要同步可以使用Collections的synchronizedMap方法.或者ConcurrentHashMap类,其基于lock实现锁分段技术,它不但确保多线程环境下数据访问安全性,而且性能上有长足的提升。

HashMap的总结:

HashMap基于哈希思想,实现对数据的读写。当键值对被传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,然后找到bucket位置来存储对象。当获取对象的时候,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap通过链表来解决碰撞问题,当碰撞发生时,对象将会储存在链表的下个节点中.HashMap在每个链表节点中储存键值对对象。当两个不同的键对象的hashcode相同时,它们会储存在同一个bucket位置的链表中,这时候就需要通过equals()方法来找到键值对。

最新文章

  1. 使用Nexus搭建Maven本地仓库
  2. [Python] 使用有道翻译API
  3. smarty缓存函数
  4. oracle的触发器
  5. 导航软件 CH Round #57 - Story of the OI Class
  6. CSDN 夏令营课程 项目分析
  7. SharePoint2013 Set Value To PeoplePicker
  8. Lucas,.net Web框架
  9. OSS web直传 ajax方式 上传图片、文件
  10. OOP的概念和基础特性
  11. migrate数据库迁移
  12. sringboot项目在tomcat上的部署
  13. .net web site 和 web application 的区别
  14. MVC实现加载更多
  15. windows环境下IP多访问
  16. Elixir木蚂蚁支付服务器验签名方法
  17. How an event flows in a pipeline Netty Internal I/O Threads (Transport Implementation)
  18. Kafka笔记整理(二):Kafka Java API使用
  19. spark sql cache时发现的空字符串问题
  20. Java 重写hashCode() 时为什么要用 31 来计算

热门文章

  1. Json格式日期转换为一般日期
  2. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
  3. (转)总结:JavaScript异步、事件循环与消息队列、微任务与宏任务
  4. 微软Insider Dev Tour 活动
  5. Web应用程序和网站的区别
  6. vs2015 生成 cordova 页面中文乱码
  7. SQLite Expert Professional 打开加密SQLite数据库
  8. C#数据导出Excel详细介绍
  9. WPF无边框移动窗体
  10. 如果您想确保Windows 10在新用户登录时不安装内置应用程序,则必须删除所有配置的应用程序。