标签: hashcode

如何使用 Ruby 生成 Java 的 String hashCode

我想在 Ruby 中生成与 Java 的 String.hashCode 方法返回的哈希码相同的哈希码。什么方法最优雅?Java 的 String hashCode 实现如下所述:http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#hashCode%28%29

ruby java string hashcode

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

不同对象使用相同的 GetHashCode()

执行这段代码后:

int a = 50;
float b = 50.0f;
Console.WriteLine(a.GetHashCode() == b.GetHashCode());
Run Code Online (Sandbox Code Playgroud)

我们得到False,这是预期的,因为我们正在处理不同的对象,因此我们应该得到不同的哈希值。

但是,如果我们执行以下命令:

int a = 0;
float b = 0.0f;
Console.WriteLine(a.GetHashCode() == b.GetHashCode());
Run Code Online (Sandbox Code Playgroud)

我们得到True. 两个对象返回相同的哈希码:0

为什么会出现这种情况?他们不应该返回不同的哈希值吗?

.net c# hashcode

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

为什么我不能只比较两个对象的 hashCode 来确定它们是否相等?

为什么Eclipse实现的equals方法要比较每个值,只比较两个对象的hashCode不是更简单吗?

据我所知:

  • hashCode 总是为相同的输入生成相同的哈希值
  • 因此,如果两个对象相等,它们应该具有相同的哈希值
  • 如果相等的对象具有相同的哈希值,我可以检查哈希值以确定对象是否相等

编辑:相关问题,如果 equals 实际上不需要 hashCode,为什么在实现 equals 时总是实现 hashCode?

java hash equals hashcode

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

Java hashCode 不能与 HashMap 一起使用吗?

我正在尝试使用 HashMap 实现稀疏网格,但是似乎重写 hashCode() 并没有按照我的预期工作。我将问题归结为以下代码:

public class Main {

private static class Coord {
    int x, y;

    public Coord(int x, int y) {
        this.x = x;
        this.y = y;
        }

        @Override
        public int hashCode() {
            // See https://en.wikipedia.org/wiki/Pairing_function#Cantor_pairing_function
            return (((x + y) * (x + y + 1)) / 2) + y;
        }
    }

    public static void main(String[] args) {
        HashMap<Coord, String> grid = new HashMap<Coord, String>();
        grid.put(new Coord(0, 0), "A");
        System.out.println(grid.get(new Coord(0, 0)));
    }
}
Run Code Online (Sandbox Code Playgroud)

我期望输出是:

A
Run Code Online (Sandbox Code Playgroud)

但是,输出是:

null …
Run Code Online (Sandbox Code Playgroud)

java grid hashmap hashcode sparse-matrix

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

Java-如何从字符串列表创建哈希ID

我有一个字符串列表。我想从列表中的所有字符串生成一个哈希码。我怎样才能做到这一点?

java string list hashcode

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

如果将常量返回给 hashcode 并将 false 返回给 equals 会发生什么

hashcode 或 hashmap 是如何工作的,如果我们重写总是返回常量的 hashcode 并且重写的 equals 方法返回 false,那么它如何在返回或删除时识别确切的对象?time bean 忘记了性能所有这些东西,我的问题是它如何能够识别确切的对象,让我多解释一下,我有一个包含两个字段的 person 类,并且覆盖了始终返回 1 的 hashcode 和返回 false 的覆盖 equals 方法,创建了 3 个对象,对象 1 -- id 10 名称 AAAA,对象 2 -- id 20,名称 BBB,对象 3 -- id 30,名称 CCC,我已将所有三个对象添加到 hashSet,之后删除了对象2、这里如何识别准确的对象(20,BBB)

java equals hashmap hashcode hashset

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

我是否应该始终重写 equals、hashcode 和 toString 方法?

我有一个相当简单的问题:根据最佳编程实践,当我创建一个新的模型类时,我应该总是重写 equals、hashcode 和 toString 方法吗?即使我不打算比较特定类的对象?

java comparison class equals hashcode

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

如果两个不同的对象具有相同的哈希码,是否可能?这是否意味着它们是相同的?

我有课

class Controller with EquatableMixin {
  final int id;
  //... other props

  Controller.from(Controller controller) :   
    id = controller.id,
    //... other props assignments

  List<Object> props => [
    id,
    //... other props
  ];
}

final ctrl1 = Controller(...); // Create ctrl1
final ctrl2 = Controller.from(ctrl1); // Create ctrl2 (actually clonning)
assert(ctrl1.hasCode != ctrl2.hasCode); // triggered!
Run Code Online (Sandbox Code Playgroud)

我期望 和ctrl1ctrl2具有不同hashCodes 的不同对象,但它们具有相同的hashCode。为什么?我如何确保这ctrl12不是指向 的指针ctrl2

object hashcode cloning flutter

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

每次在java中生成和序列化超类时,我们是否都需要在子类中生成equals和hashcode?

我有一个名为的类User.java,代码如下,

public abstract class User implements Serializable {

   // serialVersionUID

   private Integer userId;
   private String userName;
   private String fullName;

   // Constructor()
   // Getters and Setters
   // equals()
   // hashCode()
}
Run Code Online (Sandbox Code Playgroud)

而且我还有Contact.java课,

public class Contact extends User {

   // serialVersionUID

   private String phoneNumber;
   private String address;

   // Constructor()
   // Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,即使生成了 User 类,equalshashcode是否需要在子类 Contact 中再次重写它?

而且我正在使用IDE lombok,IDE是IntelliJ。我看到当我生成equalshashcode通过 IDE 时,可以选择模板,例如,

  • 默认
  • Apache commons lang 3 就是这样。 …

java serialization equals hashcode lombok

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

在地图中使用数据类的奇怪 Kotlin 行为

我是 Kotlin 的新手,我正在尝试理解它,我刚刚编写了一个简单的示例,该示例展示了如何将数据类与映射一起使用有点棘手,因为在我看来,数据类有一种奇怪的行为。默认情况下,他们根据类的每个属性定义 hashCode()。但他们没有定义默认的 equals() 方法。这给我带来了很多困惑,因为我创建了一个以数据类作为键的 HashMap,但我没有重写 hashCode() 和 equals()。我的数据类有一个 MutableList 成员。当我将一个元素放入映射中时,只要我没有将元素添加到 MutableList 中,我就会使用 map.get(dataObject) 检索它。之后,即使数据对象仍然相同,并且我使用map.keys(map.keys.indexOf(dataObject)有效)发现它,由于hashCode(),map.get(dataObject)失败了。

我可以使用普通类或添加 hashCode() 和 equals() 来修复它,从 hashCode() 中删除 MutableList,但我想知道,由于默认行为,重写 hashCode() 和 equals() 是否应该是“强制”与数据类一起使用,否则将它们与地图一起使用可能会导致错误。

我还能做些什么来避免这个问题吗?

    package cards
    
    data class Player(val name: String, var cards: MutableList<Card>) {
        constructor(name: String): this(name, mutableListOf())
    
    //I don't need to define equals, so pointers are checked. But if I don't override hashCode, as it's based
    //on every property, the hashCode is calculated considering the content of the MutableList!
    //    override …
Run Code Online (Sandbox Code Playgroud)

hashmap hashcode kotlin data-class

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