什么是 哈希表的原理
来源:互联网 发布:yii2打印sql语句 编辑:程序博客网 时间:2024/05/18 01:00
1,对对象元素中的关键字(对象中的特有数据),进行哈希算法的运算,并得出一个具体的算法值,这个值 称为哈希值。
2,哈希值就是这个元素的位置。
3,如果哈希值出现冲突,再次判断这个关键字对应的对象是否相同。如果对象相同,就不存储,因为元素重复。如果对象不同,就存储,在原来对象的哈希值基础 +1顺延。
4,存储哈希值的结构,我们称为哈希表。
5,既然哈希表是根据哈希值存储的,为了提高效率,最好保证对象的关键字是唯一的。
这样可以尽量少的判断关键字对应的对象是否相同,提高了哈希表的操作效率。
对于ArrayList集合,判断元素是否存在,或者删元素底层依据都是equals方法。
对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法。
TreeSet:
用于对Set集合进行元素的指定顺序排序,排序需要依据元素自身具备的比较性。
如果元素不具备比较性,在运行时会发生ClassCastException异常。
所以需要元素实现Comparable接口,强制让元素具备比较性,复写compareTo方法。
依据compareTo方法的返回值,确定元素在TreeSet数据结构中的位置。
TreeSet方法保证元素唯一性的方式:就是参考比较方法的结果是否为0,如果return 0,视为两个对象重复,不存。
注意:在进行比较时,如果判断元素不唯一,比如,同姓名,同年龄,才视为同一个人。
在判断时,需要分主要条件和次要条件,当主要条件相同时,再判断次要条件,按照次要条件排序。
TreeSet集合排序有两种方式,Comparable和Comparator区别:
1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。
2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。
第二种方式较为灵活。
2,哈希值就是这个元素的位置。
3,如果哈希值出现冲突,再次判断这个关键字对应的对象是否相同。如果对象相同,就不存储,因为元素重复。如果对象不同,就存储,在原来对象的哈希值基础 +1顺延。
4,存储哈希值的结构,我们称为哈希表。
5,既然哈希表是根据哈希值存储的,为了提高效率,最好保证对象的关键字是唯一的。
这样可以尽量少的判断关键字对应的对象是否相同,提高了哈希表的操作效率。
对于ArrayList集合,判断元素是否存在,或者删元素底层依据都是equals方法。
对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法。
TreeSet:
用于对Set集合进行元素的指定顺序排序,排序需要依据元素自身具备的比较性。
如果元素不具备比较性,在运行时会发生ClassCastException异常。
所以需要元素实现Comparable接口,强制让元素具备比较性,复写compareTo方法。
依据compareTo方法的返回值,确定元素在TreeSet数据结构中的位置。
TreeSet方法保证元素唯一性的方式:就是参考比较方法的结果是否为0,如果return 0,视为两个对象重复,不存。
注意:在进行比较时,如果判断元素不唯一,比如,同姓名,同年龄,才视为同一个人。
在判断时,需要分主要条件和次要条件,当主要条件相同时,再判断次要条件,按照次要条件排序。
TreeSet集合排序有两种方式,Comparable和Comparator区别:
1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。
2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。
第二种方式较为灵活。
0 1
- 什么是 哈希表的原理
- 什么是钩子,钩子的原理
- 什么是CORBA?以及它的工作原理?
- 【内容摘要】什么是内存的工作原理
- 什么是GC?GC的工作原理如何?
- 什么是GC?GC的工作原理如何?
- 什么是GC?GC的工作原理如何?
- 无处不在的二八原理[0]:什么是二八原理?
- 无处不在的二八原理[0]:什么是二八原理?
- 无处不在的二八原理[0]:什么是二八原理?
- 什么是ARP及其原理
- 什么是android运行原理
- 什么是线程安全? 线程安全是怎么完成的(原理)?
- 什么是磁珠以及磁珠的原理与应用
- 请谈谈什么是智能指针,com实现的原理 zz
- openssl 生成证书的流程和原理|什么是数字证书?
- 什么是代理服务器?其原理和常见的代理服务器
- 什么是线性插值原理 什么是双线性插值?
- nginx入门
- AndroidStudio 集成极光推送(带源码)
- 使用vsftpd服务传输文件
- 编译报错Error:Connection timed out: connect. If you are behind an HTTP proxy, please
- PayPal在 live 环境下,正式帐号登录失败
- 什么是 哈希表的原理
- 【物理】概念的理解 —— Phase(相位)
- 关于Git Bash 里出现Unlink of file 'readme.txt' failed. Should I try again? (y/n)
- BZOJ 3264 [Apio2008]免费道路
- 固定参数的函数对象与函数适配器
- 欢迎使用CSDN-markdown编辑器
- Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Cou
- Android EditText输入监听
- 使用BigDecimal进行精确运算