Java基础总结
来源:互联网 发布:淘宝有情侣网店吗 编辑:程序博客网 时间:2024/06/05 20:32
Java基础总结 - 线程安全的Map
这篇文章只是把大学记的笔记整理到博客,方便自己查看,不保证权威性(•̀ᴗ•́)و ̑̑
1. 使用Collections类的synchronizedMap方法包装一下,类似于装饰者模式传入一个map对象,里面有很多synchronize方法,实际上调用的就是我们传入map的方法
2. Hashtable基本上可以看作一个线程安全版的HashMap,有下面不同点
2. Hashtable基本上可以看作一个线程安全版的HashMap,有下面不同点
1、继承的父类不同
Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。
2、key和value是否允许null值
Hashtable中,key和value都不允许出现null值。
3、hash值不同
HashMap重新计算了key的hash值,Hashtable在求hash值对应的位置索引时,用取模运算,而HashMap在求位置索引时,则用与运算,
且这里一般先用hash&0x7FFFFFFF后,再对length取模,&0x7FFFFFFF的目的是为了将负的hash值转化为正值,因为hash值有可能为负数,
而&0x7FFFFFFF后,只有符号外改变,而后面的位都不变。
4、内部实现使用的数组初始化和扩容方式不同
HashTable在不指定容量的情况下的默认容量为11,而HashMap为16,Hashtable不要求底层数组的容量一定要为2的整数次幂,而HashMap则要求一定为2的整数次幂。
Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。
Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。
5、是否提供contains方法
HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。
6、两个遍历方式的内部实现上不同
7.没按驼峰规则Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
3.juc的concurrentHashMap,见下篇帖子
阅读全文
0 0
- 【总结】Java基础总结⑵
- 【总结】Java基础总结⑶
- 【总结】Java基础总结⑷
- 【总结】Java基础总结⑸
- 【总结】Java基础总结⑹
- 【总结】Java基础总结⑺
- java基础的总结
- java基础总结知识点
- JAVA基础总结
- java基础总结
- Java基础小小总结
- Java基础概念总结
- Java语言基础总结
- java基础总结
- Java基础学习总结
- java基础总结
- java 基础语法总结
- java基础--线程总结
- oracle如何快速创建千万数量级数据
- 《DOS命令一日通》第三章 磁盘的准备与检查
- <i></i>为0*0时,显示背景
- ci框架&tp框架隐藏index.php
- 27 个Jupyter Notebook的小提示与技巧
- Java基础总结
- 生产计划管理软件功能是什么?对生产管理有何好处?
- 算法9 Group Anagrams
- 三行代码实现 TabLayout+ViewPager 的 Tab 滑动效果,从封装到开源
- oracle中存储过程的三种异常捕获方式
- JDK7中Runnable和Callable源码概述
- RecyclerView与ScrollView嵌套,抢占焦点的问题
- Linux下VSFTPD配置全方案
- class path resource [spring-mvc.xml] cannot be opened because it does not exist