标签: hashcode

Java - TreeSet和hashCode()

我有一个关于TreeSet集合和hashCode方法的快速问题.我有一个TreeSet并且我正在添加对象,在添加对象之前,我检查它是否存在于TreeSet使用该contains方法中.

我有2个不同的对象,每个对象使用我的hashCode方法实现产生一个不同的hashCode,例如:

public int hashCode()
{
    int hash = 7;
    hash = hash * 31 + anAttribute.hashCode();
    hash = hash * 31 + anotherAttribute.hashCode();
    hash = hash * 31 + yetAnotherAttribute.hashCode();
    return hash;
}
Run Code Online (Sandbox Code Playgroud)

特定运行的hashCodes是:76126352和76126353(对象在一个属性中仅相差一位).

即使hashCodes不同,contains方法也会为这些对象返回true.有什么想法吗?这真的令人困惑,真的很感激帮助.

java hashcode treeset

18
推荐指数
1
解决办法
1万
查看次数

java.util.HashMap和HashSet的内部实现

我一直在试图了解内部实现的java.util.HashMapjava.util.HashSet.

以下是我脑海中浮现的疑惑:

  1. 什么是@Override public int hashcode()HashMap/HashSet中的重要性?这个哈希码在内部使用在哪里?
  2. 我一般都看到HashMap的关键是String这样的myMap<String,Object>.我可以映射值someObject(而不是字符串)myMap<someObject, Object>吗?我需要遵守的所有合同成功发生了什么?

提前致谢 !

编辑:

  1. 我们是说密钥的哈希码(check!)是在哈希表中映射值的实际内容吗?当我们执行myMap.get(someKey);java时,内部调用someKey.hashCode()以获取哈希表中的数字以查找结果值?

答:是的.

编辑2:

  1. 在a中java.util.HashSet,从哪里为Hash表生成密钥?它来自我们正在添加的对象,例如.mySet.add(myObject);然后myObject.hashCode()将决定它在哈希表中的位置?(因为我们不在HashSet中给出键).

答:添加的对象成为关键.价值是假的!

java language-implementation hashmap hashcode hashset

18
推荐指数
4
解决办法
5万
查看次数

如何让checkstyle跳过eclipse生成的equals()和hashcode()方法?

我们的项目包含几个类,我们有Eclipse生成的equals()和hashCode()方法(右键单击 - >源代码 - >生成hashCode()和equals()).

例:

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    final MyTO other = (MyTO) obj;
    if (num != other.num)
        return false;
    if (name == null) {
        if (other.name != null)
            return false;
    } else if (!name.equals(other.name))
        return false;
    if (table == null) {
        if (other.table != null)
            return false;
    } else if (!table.equals(other.table))
        return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这些方法适用于我们的应用程序,但遗憾的是没有通过Checkstyle的圈复杂度检查.由于这些方法是自动生成的,因此我们不关心它们的复杂性.我们可以从Checkstyle中抑制整个类,但我们希望能够排除这两种方法. …

java eclipse equals hashcode checkstyle

18
推荐指数
1
解决办法
5009
查看次数

Java:自动equals()和hashCode()

实现equals()hashCode()简单的数据POJO使我的代码混乱,维护繁琐.

有哪些库自动处理?
由于性能原因,我更喜欢字节码检测而不是AOP方法.

更新:已经讨论了实现equals()和hashCode()的必要性的主题,这是我的观点:

以最小的努力提前完成它而不是挖掘代码,添加hC/eq是不是更好?

java equals hashcode

18
推荐指数
2
解决办法
1万
查看次数

创建hashCode()方法 - Java

我在hashCode()为我创建的类编写方法时遇到了一些麻烦.此类旨在在TreeSet中使用,因此,它实现了Comparable.该类具有以下变量:

public class Node implements Comparable<Node> {
   Matrix matrix;
   int[] coordinates= new int[2];
   Node father;
   int depth;
   int cost;
Run Code Online (Sandbox Code Playgroud)

这是该compareTo()方法的实现.我希望TreeSet按成本组织这些Node结构,因此,compareTo()返回简单减法的结果.

public int compareTo(Node nodeToCompare) {
    return this.cost - nodeToCompare.cost;
}
Run Code Online (Sandbox Code Playgroud)

我还实现了一种equals()方法.

public boolean equals(Object objectToCompare) {
    if(objectToCompare== this) {return true;}
    if(objectToCompare== null || objectToCompare.getClass()!= this.getClass()) {return false;}

    Node objectNode= (Node) objectToCompare;
    return this.father.equals(objectNode.father) &&
            this.depth== objectNode.depth &&
            this.cost== objectNode.cost &&
            this.matrix.equals(objectNode.matrix) &&
            Arrays.equals(this.coordinates, objectNode.coordinates);
}
Run Code Online (Sandbox Code Playgroud)

说完这一切之后,我有几个问题:

  1. 由于我实现了一个新equals()方法,我应该实现一个新hashCode() …

java hash hashcode

18
推荐指数
2
解决办法
3万
查看次数

是否可以将私有成员的哈希码组合起来生成新的哈希码?

我有一个对象,我想生成一个唯一的哈希(覆盖GetHashCode()),但我想避免溢出或不可预测的事情.

代码应该是组合一小组字符串的哈希码的结果.

哈希码将是生成缓存密钥的一部分,因此理想情况下它们应该是唯一的,但是被散列的可能值的数量很小所以我认为概率对我有利.

这样的事情是否足够并且有更好的方法吗?

int hash = 0;
foreach(string item in collection){
    hash += (item.GetHashCode() / collection.Count)
}
return hash;
Run Code Online (Sandbox Code Playgroud)

编辑:感谢您的答案到目前为止.@Jon Skeet:不,订单并不重要

我想这几乎是另一个问题,但由于我使用结果生成缓存键(字符串)是否有意义使用像MD5这样的加密哈希函数或只使用此int的字符串表示?

c# hashcode gethashcode

17
推荐指数
2
解决办法
5388
查看次数

为什么C#没有为集合实现GetHashCode?

我正在将一些东西从Java移植到C#.在Java中hashcode,a ArrayList取决于其中的项目.在C#中,我总是从List... 获得相同的哈希码

为什么是这样?

对于我的一些对象,哈希码需要不同,因为列表属性中的对象使对象不相等.我希望哈希码对于对象的状态始终是唯一的,并且当对象相等时仅等于另一个哈希码.我错了吗?

c# java collections hashcode gethashcode

17
推荐指数
3
解决办法
9160
查看次数

如何自定义Eclipse生成的hashCode()和equals()?

建议并且有时需要表示值(值类)的来覆盖hashCode(),equals()[和可选toString()]方法.这些方法返回的值取决于类及其超类的所有成员变量或子集.要正确地实现它们,你必须要了解一些关于散列和一点代数和集合理论的理论(不要太多,几乎所有的东西都在这些方法的javadocs和有效的Java形式Josh Bloch中解释.)
在在大多数情况下,此方法的实现遵循模板,IDE(如Eclipse JDT)包含生成它们的工具.但是,工具生成器无法做出任何假设,只使用语言和标准库中提供的构造生成这些方法.因为这些方法通常看起来非常难看.

实现这些方法的另一种方法是使用图书馆像Apache的(公共琅)HashCodeBuilder,EqualsBuilderToStringBuilder.使用这些实用程序,可以实现自己的hashCode()equals()方法,看起来好多了.

我的问题是关于这两种方法的结合.我希望能够自定义Eclipse hashCode()equals()生成器,以便使用HashCodeBuilder和朋友生成它们.如果不调整JDT,是否可以(以及如何)这样做?只编写将覆盖默认实现的小插件(但不更改JDT代码).

谢谢.

java eclipse hashcode eclipse-jdt

17
推荐指数
1
解决办法
9244
查看次数

如果两个不同的对象具有相同的哈希码,会发生什么?

据我所知,两个不相等的对象可以具有相同的哈希码.在从HashMap java添加或检索时如何处理?

java equals hashmap hashcode

17
推荐指数
2
解决办法
3万
查看次数

如何为特定类编写hashCode方法?

我正在尝试为我的简单类生成一个hashCode()方法,但我没有得到它的任何地方.我将不胜感激任何帮助.我已经实现了equals()方法,如下所示,并且还想知道我是否需要实现compareTo()方法.我已经导入java.lang.Character来使用character.hashCode()但它似乎不起作用.

private class Coord{
    private char row;
    private char col;
    public Coord(char x, char y){
        row = x;
        col = y;
    }
    public Coord(){};

    public char getX(){
        return row;
    }

    public char getY(){
        return col;
    }

    public boolean equals(Object copy){
        if(copy == null){
            throw new NullPointerException("Object entered is empty");
        }
        else if(copy.getClass()!=this.getClass()){
            throw new IllegalArgumentException("Object entered is not Coord");
        }
        else{
            Coord copy2 = (Coord)copy;
            if(copy2.row==this.row && copy2.col==this.col)
                return true;
            else
                return false;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

提前致谢...

comparTo()方法给了我java.lang.Comparable转换错误..

public int …
Run Code Online (Sandbox Code Playgroud)

java class character hashcode compareto

17
推荐指数
3
解决办法
2万
查看次数