假设我有一些包含各种字段的类:classMyClass{privateStrings;privateMySecondClassc;privateCollectioncoll;//...@OverridepublicinthashCode(){//????}}其中,我确实有各种我想存储在HashMap中的对象。为此,我需要拥有MyClass的hashCode()。我必须递归进入所有字段和各自的父类,以确保它们都正确实现了hashCode(),否则MyClass的hashCode()可能不会考虑某些值。这样对吗?我如何处理该集合?我可以一直依赖它的hashCode()方法吗?它会考虑我的s
在查看覆盖hashCode()的不同选项时,我被定向到GoogleGuava库中的Objects.hashCode(Object[])(javadoc).javadoc声明它委托(delegate)给Arrays.hashCode(Object[])。在许多不同的对象类型中使用此方法是否安全?这是否容易发生哈希冲突,或者这不太可能仅仅是因为容器通常只包含一种类型的对象?作为一个简单的例子,考虑以下类,publicclassStudent{privatefinalStringname;publicStudent(Stringname){this.name=name;}@Overridep
一次性根据这些字符串的值计算哈希码的最佳方法是什么?好的,我的意思是它需要:1-快速:我需要获取大量短字符串列表(10^3..10^8项)的哈希码。2-识别整个数据列表如此多的列表可能只有几个不同的字符串必须有不同的哈希码如何用Java实现?也许有一种方法可以使用现有的字符串哈希码,但是如何合并为单独的字符串计算的许多哈希码?谢谢。 最佳答案 为您的字符串创建一个占位符类,然后使用CRC32class.它简单快速:importjava.util.zip.CRC32;publicclassHugeStringCollection{pr
我在canStringBufferobjectsbekeysinTreeSetinJava?上找到了这条评论“Java中的map使用了2种识别策略(或多或少)。散列:将输入“Foo”转换为尽可能最好的尝试,以生成一个唯一访问数组索引的数字。(纯粹主义者,请不要辱骂我,我是故意简化的)。该索引是存储您的值的位置。“Foo”和“Bar”实际上可能生成相同的索引值,这意味着它们都将映射到相同的数组位置。显然这是行不通的,所以这就是“equals()”方法的用武之地;它用于消除歧义比较:通过使用比较方法,您不需要这个额外的消歧步骤,因为比较从一开始就不会产生这种冲突。“Foo”等于的唯一键是“
我读过这个问题:Changingtheelementsinasetchangesthe'equals'semantics但是,我不知道如何解决我无法更改HashSet中的项目并稍后将其删除的问题。我有一些示例源代码:publicstaticvoidmain(String[]args){TestClasstestElement=newTestClass("1");Setset=newHashSet();set.add(testElement);printIt(testElement,set,"FirstSet");testElement.setS1("asdf");printIt(tes
我们有一个包含多个字段的自定义类,出于业务领域的原因,我们不能为此重写equals/hashcode方法然而,在单元测试期间,我们应该断言集合是否包含此类的项目ListcustomObjectList=classUnderTest.methodUnderTest();//createcustomObjectwithfieldssettotheverysamevaluesasoneoftheelementsincustomObjectList//weshouldassertherethatcustomObjectListcontainscustomObject但是,到目前为止,我们还没有
我注意到在Java中,hashCode用于HashMap,它只包含键和值相同的条目,例如{1:1},{"abc":"abc"}等始终为零。这种奇怪的行为背后有什么原因吗? 最佳答案 这是specification的结果Map.Entry的hashCode(),它要求对键和值的哈希码进行异或运算。唯一可以告诉您为什么选择哈希码的人是最初编写它的人,尽管我的印象是Java后悔指定这个(坏的)哈希函数。 关于java-为什么包含与键相同的值的HashMap的HashCode为零,我们在Stac
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我想知道当Hashtable仅包含每对具有相同键和值的条目时,Java的Hashtable#hashCode()的默认实现是否被破坏。例如,请参见以下应用程序:publicclassHashtableHash{publicstaticvoidmain(finalString[]args){finalHashtableht=newHashtable();f
我有两个对象列表,用户和产品用户拥有产品,每个产品关联到1个用户但是一个产品类型可以是多个并且由不同的用户拥有用户:Ed、Rob产品:古柯、雪碧(1)、雪碧(2)、啤酒Ed有Coca和Sprites(1)、RobSprites(2)和啤酒我需要为每个唯一(用户+产品)生成一个id这可能不是一个好主意user.hashCode()+product.hashCode()什么是继续进行的好方法? 最佳答案 如果用户和产品都创建伪随机散列码,您的hashCode并没有那么糟糕。如果您担心由于user或product中的错误hashCode实
我一直在学习OCJP(以前的SCJP),我遇到了以下使用LinkedHashSet的示例:publicclassTest{intsize;publicTest(ints){this.size=s;}@Overridepublicbooleanequals(Objectobj){return(this.size==((Test)obj).size);}publicstaticvoidmain(String[]args){LinkedHashSets=newLinkedHashSet();s.add(newTest(1));s.add(newTest(2));s.add(newTest(1