HashTable, HashSet, HashMap的区别
2015-08-03 22:23
274 查看
hash是一种很常见也很重要的数据结构,是用hash函数根据键值(key)计算出存储地址,以便直接访问。由完美hash函数(即键值和地址是一一对应的)计算出的地址,在访问时,时间复杂度为O(1)。
java的Object对象提供了hashCode()这个方法,该方法返回一个hash值。对于变量,该方法一般返回该变量的内存地址。在使用java的HashMap对象时,该方法和equals()方法一起使用,要确保equals()返回true时,hashCode()能返回同样的值;实现这点,一般要重写对象的hashCode()/equals()方法。
关于hash,java提供了三个类HashMap, HashSet, HashTable,他们的区别如下:
1. HashSet、HashTable实质使用HashMap实现的;
2. 在HashSet中,有如下定义:
3. HashTable继承于Dictionary类,与HashMap的主要的不同是HashTable是同步的(synchronize)并且不允许null值操作(key 和value均不能为null);在多线程访问时,不需要为他的方法实现同步,而HashMap必须为之提供外同步。
java的Object对象提供了hashCode()这个方法,该方法返回一个hash值。对于变量,该方法一般返回该变量的内存地址。在使用java的HashMap对象时,该方法和equals()方法一起使用,要确保equals()返回true时,hashCode()能返回同样的值;实现这点,一般要重写对象的hashCode()/equals()方法。
关于hash,java提供了三个类HashMap, HashSet, HashTable,他们的区别如下:
1. HashSet、HashTable实质使用HashMap实现的;
2. 在HashSet中,有如下定义:
private final static Object dummy = new Object(); public boolean add(Object obj){ return map.put(obj, dummy) == null; }即插入HashSet中的值,为HashMap中的key,所有的key对应的value均为dummy。
3. HashTable继承于Dictionary类,与HashMap的主要的不同是HashTable是同步的(synchronize)并且不允许null值操作(key 和value均不能为null);在多线程访问时,不需要为他的方法实现同步,而HashMap必须为之提供外同步。
相关文章推荐
- php模拟post请求发送文件
- hadoop-eclipse插件编译备注
- Mathematica
- 如何在 Git 里撤销(几乎)任何操作
- C++知识点总结(6)
- C++知识点总结(6)
- LeetCode DB: Department Highest Salary
- Java之装饰模式(Decorator Pattern)
- dojo事件驱动编程之事件绑定
- 【暑假测试3】B CodeForces 560C
- 小知识点(十)——如何在局域网内连接mysql
- Java学习笔记---基本类型、运算优先级的一些知识整理
- Android中多线程编程(四)AsyncTask类的详细解释(附源码)
- 《MATLAB在语音信号分析和合成中的应用》随书附带程序下载 程序打不开
- xilinx usb jtag 驱动 安装
- 关于ViewPager显示循环图片的例子
- BZOJ 2002 Bounce 弹飞绵羊(分块|暴力|)(困难)
- Day8.03
- C++ 布尔类型bool
- windows7下python3.4.3 添加库路径(转)