比较集合中的对象

Kis*_*lin 0 java hash set

现在我有这个Java代码

import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class Dummy {

    private String value;

    public Dummy(final String value) {
        this.value = value;
    }

    public boolean equals(final Object that) {
        return that instanceof Dummy && Objects.equals(value, ((Dummy) that).value);
    }

    public int hashcode() {
        return Objects.hash(value);
    }

    public static void main(final String... args) {
        final Set<Dummy> dummies = new HashSet<>();
        dummies.add(new Dummy("toto"));
        System.out.println(dummies.contains(new Dummy("toto")));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是"假的",我应该通过只更改一个字符将其更改为"true",但我完全不知道如何做到这一点......任何想法?谢谢.:)

dav*_*xxx 5

hashcode()不是Object的方法,但hashCode()是.

 public int hashcode() {
         return Objects.hash(value);
   }
Run Code Online (Sandbox Code Playgroud)

应该

public int hashCode() {
        return Objects.hash(value);
    }
Run Code Online (Sandbox Code Playgroud)

  • 您可能想在这两种方法中添加“添加@Override”会立即揭示这个小肮脏的“技巧”。 (2认同)