博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读书笔记(一)Java中HashTable、HashMap、TreeMap理解
阅读量:6581 次
发布时间:2019-06-24

本文共 1018 字,大约阅读时间需要 3 分钟。

hot3.png

相同点

实现接口

Hashtable、HashMap、TreeMap 三个类均实现Map接口。

存储内容

Hashtable、HashMap、TreeMap 三个类均存储Key、Val键值对。键不可重复,且键只能对应一个Val信息。

不同点

存储特性

HashTable

对应存储(Key、Val)不允许为空。如下图所示:
1001

HashMap

对应存储(Key、Val)允许为空,Key有且只能有一个null,Val不限定null的数量。当key重复后,后面存储的键值对就会替换之前的键值对。如下图所示:
1002

TreeMap

对应存储(Key、Val)时,Key不允许为空。如下图所示:
1003

顺序特性

HashTableHashMap

对应存储的(Key、Val)是无序存储。如下图所示:
1005

TreeMap

对应存储的(Key、Val)是有序存储,因为TreeMap实现SortedMap接口,默认为生序排序,且内部实现排序为红黑树排序。(红黑树排序为树中任何一个节点均比左子树中所有节点都大于或等于,均比右子树中所有节点都小于或等于)。如下图所示:
1006

初始化、增长方式

HashTable

初始化时,若没有指定大小,默认存储空间为11。(JDK源代码)如下图所示:
2001

HashMap

初始化时,若没有指定大小,默认存储空间为16。(JDK源代码)如下图所示:
2002

线程安全性

HashTable

HashTable类中函数均为同步函数,在函数前增加(synchronized关键字),因此保证了线程安全性。但是在多线程下,处理效率表现低下。当一个线程进行put操作时,其他线程就算是get操作,也需要等待锁释放后才可以进行操作。(不推荐在程序中使用)

HashMap

HashMap类中函数均为非同步函数,在同一时刻可以由多个线程同时进行写操作,因此不能保证了线程安全性。如果需要同步,推荐使用ConcurrentHashMap,此类中函数支持同步。与HashTable区别在于,HashTable锁是对象级别,而ConcurrentHashMap是分段锁,当一个线程进行写操作时,其他线程可以读取其他段上数据信息。ConcurrentHashMap不仅保证了多线程的安全性,而且从效率上也有很明显的提升。(推荐在程序中使用)

转载于:https://my.oschina.net/u/136229/blog/1824385

你可能感兴趣的文章
Magento SOAP API V2 开放接口修改订单状态
查看>>
Python:收集IP信息
查看>>
sql server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法...
查看>>
React/JSX 编码规范
查看>>
Mac OSX 编译 LeanSDR
查看>>
Unit1 作业
查看>>
AngularJs-02-表达式和作用域
查看>>
在不改变链表的情况下从尾到头打印连表
查看>>
AfxExtractSubString 函数的相关问题
查看>>
Linux学习之CentOS(七)--CentOS下j2ee环境搭建
查看>>
pythopn time & datetime模块(时间)
查看>>
微软工程师升级打怪之路
查看>>
python函数之参数、参数解构
查看>>
Java集群优化——dubbo+zookeeper构建高可用分布式集群
查看>>
jquery日历选择插件(收集)
查看>>
漫谈液晶显示器的保养与维护
查看>>
HP-ux AIX Linux扩展lv的方法
查看>>
Linux用户管理(八)Shell编程基础
查看>>
ps -aux僵尸进程
查看>>
StringUtils方法全集介绍
查看>>