`
ccr1988
  • 浏览: 35639 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hash,hashcode,HashTable,HashSet,HashMap的用法

阅读更多
hash  也叫做“散列”,通过散列算法,变换成固定长度的输出,该输出就是散列值。计算散列函数的方法很多,例如:直接寻找址方,平均分析法,折叠法等
hashcode 是散列码,是由一个对象导出的整型值,没有规律的。
对于hashcode的误解也很多主要是在值的定位上没有弄清楚,一般一个类如果不重写hashcode那么它就一定继承Object的,而Object的hashcode 每个对象得到的
一样是不一样。
  
String a="abc";
  //假设一个对象,构造函数带名称和年龄2个属性,无其它任何方法。
   Person m=new Person("fov","28")
   StringBuffer  x=new StringBuffer(a)
   String b="abc";
   Person n=new Person("fov","28")
   StringBuffer y=new StringBuffer(b);
   比较 a与b ,m与n的hashcode?
  很多人都可能以为相等的,其实String 的原码里已经对hashcode进行了重写,所以它的hashcode的值是重新计算的,重新计算就跟String的内容是相关的,由于他们的内容是一样的所以a与b的hashcode是一样的,而Person与StringBuffer这个2个类没有重写hashcode而他们的hashcode算法是继承Object的hashcode所以他们是不一样的。
HashTbale,HashSet,HashMap由于他们在存储的过程中用到hash的算法所以也带了hash字样,但是他们具体的存储方式是不一样的,也就决定了他们各自的功能上也存在在着差异。
HashTable   HashTable中hash数组默认的大小是11,增加的方式是old*2+1 ,直接使用对象的hashCode可以得到HashTable的hash值
HashMap     HashMap 中hash数组的默认大小是16,增加方式跟2的指数相关,它的hash值需要重新计算,hashMap主要由key,value,entry 来决定的
HashSet     的内部是使用HashMap实现的,和hashMap不同的是它不需要key和value的值由这些内部特征才会得到大家平时知道的那些不同点和相同点。
0
0
分享到:
评论

相关推荐

    hash表和hashCode1

    这个散列码用于在基于散列的集合(如HashSet、HashMap、HashTable)中定位对象。当向这些集合中添加对象时,首先调用hashCode(),根据返回的散列码决定对象在内部存储的位置。如果已有相同散列码的对象,会调用...

    hashcode使用方法

    - **集合框架**:在 `HashSet`, `HashMap`, `Hashtable` 等集合中,`hashCode` 方法用于快速查找和存储对象。 - **缓存机制**:在缓存中,`hashCode` 和 `equals` 方法一起用于识别缓存项,以便在需要时快速找到它们...

    HashMap 概述 精讲 .md

    HashMap使用键对象的hashCode()方法返回的整数值作为哈希码。为了减少哈希冲突,Java 1.8还引入了一种新的哈希算法,通过XOR运算来进一步散列原始哈希值。 #### 扩容机制 当HashMap的元素个数达到容量和负载因子的...

    阿里巴巴电话面试试题(含答案).doc

    - **哈希算法**:HashMap在检测key时会重新计算hash值,而Hashtable则直接使用key的原始hashCode。 - **初始容量**:HashMap的默认初始容量是16,加载因子是0.75;而Hashtable的默认初始容量是11,加载因子也是...

    2014年阿里巴巴java工程师电话面试题目

    - hash算法:Hashtable直接使用key的hashCode()返回的哈希码,而HashMap在计算哈希码时会使用自己的算法。 - 容量和负载因子:Hashtable默认的初始容量是11,负载因子为0.75;HashMap默认的初始容量是16,负载因子也...

    通过分析 JDK 源代码研究 Hash 存储机制

    在JDK中,HashMap类使用了`hash()`方法来计算键的哈希值,这个方法基于键对象的`hashCode()`方法,确保不同的键产生不同的哈希值,以减少冲突的可能性。 冲突是指两个不同的键经过哈希函数处理后得到相同的哈希值,...

    详解Java中用于查找对象哈希码值的hashCode()函数

    在Java编程语言中,`hashCode()`函数是一个非常关键的方法,特别是在使用哈希数据结构如HashMap、HashSet和Hashtable时。这个函数的主要目的是为了高效地定位对象在哈希表中的位置。当我们谈论哈希码,实际上是在...

    Java中的HashMap浅析

    HashSet,HashMap是用的比较多的一种,顺序结构的ArrayList、LinkedList这种也比较多,而像那几个线程同步的容器用的比较少,像Vector和HashTable,因为这两个线程同步的容器已经不被JDK推荐使用了,这是个比较老式...

    java中级面试题(自己汇总)

    本文总结了Java中级面试题,涵盖了集合、HashMap、HashSet、HashTable、ConcurrentHashMap、红黑树、Java 8对HashMap的优化、LinkedHashMap、TreeMap、IdentityHashMap等知识点。 集合 * List和Set都是继承自...

    Java提高篇之hashCode

    在前面三篇博文中LZ讲解了(HashMap、HashSet、HashTable),在其中LZ不断地讲解他们的put和get方法,在这两个方法中计算key的hashCode应该是重要也是精华的部分,所以下面LZ揭开hashCode的“神秘”面纱。...

    02-Java集合容器面试题-重点.docx

    HashMap的数据结构hash()函数JDK1.8新增红黑树总结能否使用任何类作为Map的key?为什么HashMap中String、Integer这样的包装类适合作为K?如果使用Object作为HashMap的Key,应该怎么办呢?HashMap为什么不直接使用...

    Java中的hashcode方法介绍

    这个数值是根据对象的状态计算出来的,通常用于哈希表数据结构,如`HashSet`、`HashMap`和`HashTable`。 哈希表是一种高效的数据结构,通过将键(key)转换为哈希码(hash code)来快速定位数据。`hashCode`方法的...

    Java集合框架面试题

    - ⑤、HashMap 需要重新计算 hash 值,而 Hashtable 直接使用对象的 hashCode。 6. HashMap、LinkedHashMap、TreeMap 的区别: - LinkedHashMap 保存了记录的插入顺序,遍历要比 HashMap 要慢。 - TreeMap 实现...

    Java 最常见的 208 道面试题:第二模块答案

    - **contains 方法**:Hashtable 提供了 contains 方法,HashMap 没有,但提供了 containsKey 和 containsValue 方法。 **决定使用 HashMap 还是 TreeMap**: HashMap 适用于快速插入、删除和查找,但元素顺序不...

    Java面经.适用于校招

    Java基础部分包括了对Java语言的核心概念和使用方法的介绍。 1.1 Java的8种基本数据类型装箱拆箱 - 8种基本数据类型包括:byte、short、int、long、float、double、char和boolean。 - 装箱是将基本数据类型封装到...

    java面试精选必备题集

    * Set和hashCode及equals方法的联系 + hashCode:对象的哈希码 + equals:对象的相等判断 * List和Map的区别 + List:有序、可重复、索引访问 + Map:无序、不可重复、键值对访问 * ArrayList和LinkedList的区别...

    JAVA面试-集合知识点汇总(高频、经典).doc

    `HashMap`不是线程安全的,主要原因在于它的多个方法(如`put`方法)没有被同步。在并发环境中,如果没有适当的同步措施,可能会出现数据不一致的问题,例如: - 并发插入时可能导致链表形成环形结构。 - 并发修改...

    2021字节跳动面试参考手册.pdf

    - HashTable是线程安全的,所有方法都使用synchronized同步,而HashMap不是线程安全的。 6. 常用的集合类。 - Java集合框架中的常用集合类包括List,Set,Map等,它们具有不同的用途和特点。 7. List,Set,Map...

    值得收藏的2017年Java开发岗位面试题

    Java集合类有很多,常见的有ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等。 4. 描述一下ArrayList和LinkedList各自实现和区别。 ArrayList使用数组实现,LinkedList使用链表实现。ArrayList查找...

    java开发常用技术.docx

    9. **HashMap、HashSet和HashTable的区别** - **HashMap**:非同步,键唯一,允许空值。 - **HashTable**:同步,键值均唯一,不允许空值。 - **HashSet**:基于HashMap实现,不允许重复元素。 10. **ArrayList...

Global site tag (gtag.js) - Google Analytics