首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

21个Java Collections面试问答

该条目存储在LinkedList中,因此,如果已经存在一个条目,则使用equals()方法检查传递的键是否已存在,如果是,它将覆盖该值,否则它将创建一个新条目并存储此键值条目。...如果这些方法的实现不正确,则两个不同的Key可能会产生相同的hashCode()和equals()输出,在这种情况下,HashMap不会考虑将它们存储在不同的位置,而是将其覆盖并覆盖它们。...如果o1.hashCode() == o2.hashCode是真的,这并不意味着o1.equals(o2)会true。 20、我们可以使用任何类作为Map键吗?...如果该类重写equals()方法,则它也应该重写hashCode()方法。 对于所有实例,该类应遵循与equals()和hashCode()关联的规则。这些规则请参考前面的问题。...不可变的类还确保hashCode()和equals()将来不会更改,这将解决任何可变性问题。undefined例如,假设我有一个MyKey用于HashMap键的类。

2K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    走,HashMap,敢去爬山吗?

    来看一下 HashMap 的特点: HashMap 的键必须是唯一的,不能重复。 HashMap 的键允许为 null,但只能有一个这样的键;值可以有多个 null。...只能使用关联的键来获取值。 HashMap 只能存储对象,所以基本数据类型应该使用其包装器类型,比如说 int 应该为 Integer。...对于任意两个不同的数据块,其散列值相同的可能性极小,也就是说,对于一个给定的数据块,找到和它散列值相同的数据块极为困难。...对于任意给定的对象,只要它的 hashCode() 返回值是相同,那么 hash() 方法计算得到的 Hash 码就总是相同的。...要能够做到这一点,就要求作为键的对象必须是不可变的,并且 hashCode() 方法要足够的巧妙,能够最大可能返回不重复的 hashCode 值,比如说 String 类。

    62930

    HashMap相关(二)

    基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。...迭代集合视图所需的时间与 HashMap 实例的 “容量”(桶的数量)及其大小(键-值映射关系数)的和成比例。...(结构上的修改是 指添加或删除一个或多个映射关系的操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。...覆盖hashCode()使其以number的值作为hashcode返回,这样对于相同内容的对象来说它们的hashcode也就相同了。...而覆盖equals()是为了在HashMap判断两个key是否相等时使结果有意义(有关重写equals()的内容可以参考我的另一篇文章《重新编写Object类中的方法 》)。

    46650

    【29期】Java集合框架 10 连问,你有被问过吗?

    HashMap 不是线程安全的 HashMap 是 map 接口的实现类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。...,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。...2.当我们试图把某个类的对象当成 HashMap的 key,或试图将这个类的对象放入 HashSet 中保存时,重写该类的equals(Object obj)方法和 hashCode() 方法很重要,而且这两个方法的返回值必须保持一致...:当该类的两个的 hashCode() 返回值相同时,它们通过 equals() 方法比较也应该返回 true。...通常来说,所有参与计算 hashCode() 返回值的关键属性,都应该用于作为 equals() 比较的标准。 3.HashSet的其他操作都是基于HashMap的。

    60130

    Java程序员必须掌握的数据结构:HashMap

    Entry数组初始的大小是16。 Node节点的内部属性key、value分别代表键和值,hash代表key的hash值,而next则是指向下一个链表节点的指针。...首先会调用hash方法计算key的hash值,通过key的hashCode值与key的hashCode高16位进行异或运算,使hash值更加随机与均匀。...但实际上期望的size应该是2,此时就出现了数据不一致的问题,Entry数组的容量会出现错误。 2.2 线程安全的ConcurrentHashMap 面试官:有线程安全的Map吗?...ConcurrentHashMap对于底层Entry数组、size容量都添加了可见性的修饰,保证了其他线程能实时监听到该值的最新修改。...以【面试官面试】形式覆盖Java程序员所需掌握的Java核心知识、面试重点,本博客收录在我开源的《Java学习指南》中,会一直完善下去,希望收到大家的 ⭐ Star ⭐支持,这是我创作的最大动力: https

    236109

    Java集合框架 10 连问,你有被问过吗?

    HashMap 不是线程安全的 HashMap 是 map 接口的实现类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。...,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。...当我们试图把某个类的对象当成 HashMap的 key,或试图将这个类的对象放入 HashSet 中保存时,重写该类的equals(Object obj)方法和 hashCode() 方法很重要,而且这两个方法的返回值必须保持一致...:当该类的两个的 hashCode() 返回值相同时,它们通过 equals() 方法比较也应该返回 true。...通常来说,所有参与计算 hashCode() 返回值的关键属性,都应该用于作为 equals() 比较的标准。 HashSet的其他操作都是基于HashMap的。

    5910

    java为什么要重写hashCode和equals方法

    然而,程序员应该意识到这样的事实,对于不相等的对象产生截然不同的整数结果,有可能提高散列表(hash table)的性能。      ...如果只重写了equals方法而没有重写hashCode方法的话,则会违反约定的第二条:相等的对象必须具有相等的散列码(hashCode)      同时对于HashSet和HashMap这些基于散列值...数组的下标是根据传入的元素hashCode方法的返回值再和特定的值异或决定的。...如果该数组位置上已经有放入的值了,且传入的键值相等则不处理,若不相等则覆盖原来的值,如果数组位置没有条目,则插入,并加入到相应的链表中。检查键是否存在也是根据hashCode值来确定的。...b、对于对象中每一个关键域f(值equals方法中考虑的每一个域),完成一些步骤:                 1、为该域计算int类型的散列吗c:                     1)

    2.9K21

    【小家java】Java中IdentityHashMap使用详解---允许key重复(阐述和HashMap的区别)

    这里我贴出两段源码,大家应该就能明白了: String和Interger的HashCode方法源码: public int hashCode() { int h = hash;...则视新键与已经存在的键相同,用新值去更新旧值,然后put方法返回旧值 对应源码: if (p.hash == hash && ((k = p.key) == key || (key !...的put()方法返回null的特殊情况: 一:要是已经存在键的映射,但是值是null,那么调用put()方法再更新键的值时, put()方法会把旧值null返回(因为旧值为null,所以很特殊)...所以它竟然与eq和HashCode方法都木有关系哟。为了解释这个问题,我插播一个小例子: Java中==,到底比较的什么?...最后 比如对于要保存的key,k1和k2,当且仅当k1== k2的时候,IdentityHashMap才会相等,而对于HashMap来说,相等的条件则是:对比两个key的hashCode等 IdentityHashMap

    3.5K40

    HashMap的工作原理

    面试官可能会问出下面的问题: “你知道HashMap的工作原理吗?” “你知道HashMap的get()方法的工作原理吗?”    ...当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。”...如果两个不相等的对象返回不同的hashcode的话,那么碰撞的几率就会小些,这样就能提高HashMap的性能。     我们可以使用自定义的对象作为键吗? 这是前一个问题的延伸。...当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。...键对象的equals()方法用来找到键值对。     因为HashMap的好处非常多,我曾经在电子商务的应用中使用HashMap作为缓存。

    60630

    java集合超详解

    3、尽量的让hashCode值散列开(两值用异或运算可使结果的范围更广) HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成,我们应该为保存到...HashSet中的对象覆盖hashCode()和equals(),因为再将对象加入到HashSet中时,会首先调用hashCode方法计算出对象的hash值,接着根据此hash值调用HashMap中的hash...在覆盖equals()和hashCode()方法时, 要使相同对象的hashCode()方法返回相同值,覆盖equals()方法再判断其内容。...使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。...Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

    1.1K31

    HashMap的工作原理

    这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入让这道题变得更加复杂。...面试官可能会问出下面的问题: “你知道HashMap的工作原理吗?” “你知道HashMap的get()方法的工作原理吗?”...当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。”...如果两个不相等的对象返回不同的hashcode的话,那么碰撞的几率就会小些,这样就能提高HashMap的性能。 我们可以使用自定义的对象作为键吗? 这是前一个问题的延伸。...当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。

    77780

    灵魂拷问:equals()和hashCode()是远房亲戚吗?

    在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题。比如说:Java 的 equals() 和 hashCode() 是远房亲戚吗?...在 main 方法中,我们创建了两个 Cmower 类型的对象,name 分别为“沉默王二”和“沉默王三”,并将它们作为键放入了 HashMap 当中;按理说,只要键的 name 为“沉默王二”,程序就应该能够获取我们之前放入的...(扎心了,老铁) HashMap 之所以能够更快地通过键获取对应的值,是因为它的键位上使用了哈希码。...当我们需要从 HashMap 中获取一个值的时候,会先把键转成一个哈希码,判断值所在的位置;然后在使用“==”操作符或者 equals() 方法比较键位是否相等,从而取出键位上的值。...当我们要获取某个“值”时,实际上是要获取数组中的某个位置的元素。而数组的位置,就是通过“键”来获取的;更进一步说,是通过“键”对应的哈希码计算得到的。

    38340

    hashmap的实现原理面试_jvm面试题总结及答案

    当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。...因为HashMap的好处非常多,我曾经在电子商务的应用中使用HashMap作为缓存。...()方法将元素放入map中 使用add()方法将元素放入set中 HashMap中使用键对象来计算hashcode值 HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode...当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。”...如果两个不相等的对象返回不同的hashcode的话,那么碰撞的几率就会小些,这样就能提高HashMap的性能。 我们可以使用自定义的对象作为键吗? 这是前一个问题的延伸。

    48010

    Java集合详解【面试+工作】

    所有参与计算 hashCode() 返回值的关键属性,都应该用于作为 equals() 比较的标准。...;允许null的键或值; Hashtable:线程安全的,不允许null的键或值; Properties::key和value都是String类型,用来读配置文件; TreeMap:对key排好序的Map...存储的数 据是有序的。 HashMap: Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许重复,但允许值重复。...HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。...int或long类型的值,然后使用==操作符比较; 当你编写完成了equals方法之后,应该问自己三个问题:它是否是对称的、传 递的、一致的?

    2K60

    你所不知道的Java之HashCode

    之所以写HashCode,是因为平时我们总听到它。但你真的了解hashcode吗?它会在哪里使用?它应该怎样写? 相信阅读完本文,能让你看到不一样的hashcode。...对于使用散列的数据结构,如HashSet、HashMap、LinkedHashSet、LinkedHashMap,如果没有很好的覆写键的hashcode()和equals()方法,那么将无法正确的处理键...HashMap将键的hash值与数组下标建立映射,通过键对象的hash函数生成一个值,以此作为数组的下标,这样我们就可以通过键来快速的定位到存储位置了。...; 第二步是将键的hashcode的高16位异或低16位(高位运算),这样即使数组table的length比较小的时候,也能保证高低Bit都参与到Hash的计算中,同时不会有太大的开销; 第三步是hash...总结 通过上述分析,我们设计hashcode()应该注意的是: 无论何时,对同一个对象调用hashcode()都应该生成同样的值。 hashcode()尽量使用对象内有意义的识别信息。

    74300

    为什么重写了equals()也要重写hashCode()

    true 一致性:对于两个非空对象x、y,在没有修改此对象的前提下,多次调用返回的结果应该相同 对于任何非空的对象x,x.equals(null)都应该返回false hashCode方法 Object...方法返回的哈希值应该是相同的。...如果两个对象通过equals方法比较是相等的,那么要求这两个对象的hashCode方法返回的值也应该是相等的。...如果两个对象通过equals方法比较是不同的,那么也不要求这两个对象的hashCode方法返回的值是相同的。但是我们应该知道对于不同对象产生不同的哈希值对于哈希表(HashMap等等)能够提高性能。...equals方法和hashCode方法会在哪用到 这两个方法经常出现在Java中的哪个类里面呢?如果看过HashMap源码的应该了解这两个方法经常出现在HashMap中。

    1K10
    领券