标签: hashcode

为非常简单的类实现`hashCode()`

我有一个非常简单的类,只有一个字段成员(例如String).是否可以hashCode()简单地返回fieldMember.hashCode()?或者我应该以某种方式操纵字段的哈希码?另外,如果我应该操纵它,为什么呢?

java hashcode

9
推荐指数
2
解决办法
3300
查看次数

将对象的哈希码定义为所有类变量哈希码的和,乘,等等是不正确的吗?

假设我有以下课程:

class ABC {
    private int myInt = 1;
    private double myDouble = 2;
    private String myString = "123";
    private SomeRandomClass1 myRandomClass1 = new ...
    private SomeRandomClass2 myRandomClass2 = new ...

    //pseudo code
    public int myHashCode() {
        return 37 *
               myInt.hashcode() *
               myDouble.hashCode() *
               ... *
               myRandomClass.hashcode()
    }
}
Run Code Online (Sandbox Code Playgroud)

这是hashCode的正确实现吗?这不是我通常这样做的方式(我倾向于遵循Effective Java的指导方针),但我总是有诱惑去做类似上面代码的事情.

谢谢

.net c# java hashcode

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

从Android中的ArrayList中删除重复的对象

我知道这已经在这里一遍又一遍地讨论,但我尝试过的所有例子都没有为我工作.

我得到了什么

我从Android访问呼叫日志,我得到了所有呼叫的列表.当然,在这里我得到了很多重复.首先我制作一份清单

List<ContactObject> lstContacts = new ArrayList<ContactObject>();
Run Code Online (Sandbox Code Playgroud)

然后我在其中添加对象

While (get some record in call log)
{
    ContactObject contact = new ContactObject();
    contact.SetAllProperties(......)  
    lstContacts.add(contact);  
}

Set<ContactObject> unique = new LinkedHashSet<ContactObject>(lstContacts);
lstContacts = new ArrayList<ContactObject>(unique);
Run Code Online (Sandbox Code Playgroud)

Contact Object类很简单

public class ContactObject {

    public ContactObject() {
        super();
    }

 @Override
 public boolean equals(Object obj) {
     if (!(obj instanceof ContactObject))
        return false;

     return this.lstPhones == ((ContactObject) obj).getLstPhones(); 
 }

 @Override
 public int hashCode() {
     return lstPhones.hashCode();
 }

    private long Id;
    private String name;
    private List<String> lstPhones; …
Run Code Online (Sandbox Code Playgroud)

java android arraylist hashcode treeset

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

hibernate如何使用equals()和hashCode()?

如果你从db加载一个实体并以某种方式修改它,hibernate会使用equals/hashCode来比较实体的当前状态和它的快照,以确定是否需要执行sql更新?

如果它做了这样的比较,我还有另外一个问题:如果equals将返回true,那么hibernate是否会认为实体没有改变或试图使用它的默认comprasion(可以肯定)?

java hibernate equals hashcode

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

使用equalsIgnoreCase覆盖hashCode并重写equals以检查相等性

我目前有一个被覆盖的equals(Object)看起来像这样:

@Override
public boolean equals(Object o) {
    if (o == this) return true;
    if (! (o instanceof Player)) return false;
    Player p = (Player) o;
    return getFirstName().equalsIgnoreCase(p.getFirstName()) && 
            getLastName().equalsIgnoreCase(p.getLastName());
}
Run Code Online (Sandbox Code Playgroud)

我hashCode()目前看起来像这样:

@Override
public int hashCode() {
    int result = 17;
    result = 31 * result + getFirstName().toLowerCase().hashCode();
    result = 31 * result + getLastName().toLowerCase().hashCode();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是关于我重写的hashCode()方法.我知道我需要hashCode()为两个对象返回相同的值,如果它们被equals(Object)方法认为是相等的.我的直觉告诉我,有些情况下这个hashCode()会违反合同.

是否有一种可接受的方法在重写的equals(Object)方法中使用equalsIgnoreCase(String)方法并生成不违反合同的哈希码?

java overriding equals hashcode

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

Java为两个可互换的整数重写equals()和hashcode()

我重写了两个int的简单容器对象的equals和hashcode方法.每个int都反映了另一个对象的索引(该对象是什么并不重要).该类的要点是表示两个对象之间的连接.

连接的方向无关紧要,因此无论两个整数在对象中的哪个方向,equals方法都应该返回true.

connectionA = new Connection(1,2);
connectionB = new Connection(1,3);
connectionC = new Connection(2,1);

connectionA.equals(connectionB); // returns false
connectionA.equals(connectionC); // returns true
Run Code Online (Sandbox Code Playgroud)

这是我所拥有的(从Integer的源代码修改):

public class Connection {
    // Simple container for two numbers which are connected.
    // Two Connection objects are equal regardless of the order of from and to.

    int from;
    int to;

    public Connection(int from, int to) {
        this.from = from;
        this.to = to;
    }

    // Modifed from Integer source code
    @Override
    public boolean equals(Object obj) {
        if …
Run Code Online (Sandbox Code Playgroud)

java hash-code-uniqueness equals hashcode

9
推荐指数
2
解决办法
2819
查看次数

如何通过组合它的键的hashCodes来计算Pojo的hashCode

考虑我有一个POJO具有String类成员:

class POJO {
  String name, address, emailId;
  equals() {

  }
  hashCode() {
    // How?    
  }
}
Run Code Online (Sandbox Code Playgroud)

如何将hashCode我的弦乐组合成一个hashCodePOJO?

java hashcode pojo

9
推荐指数
3
解决办法
7965
查看次数

php和c#中的hmac_sha256不同

这是我的PHP代码:

hash_hmac( "sha256", utf8_encode( $filename ), utf8_encode( $password ) );
Run Code Online (Sandbox Code Playgroud)

这是我的C#代码:

var hmacsha256 = new HMACSHA256( Encoding.UTF8.GetBytes( password ) );
hmacsha256.ComputeHash( Encoding.UTF8.GetBytes( filename ) );
Run Code Online (Sandbox Code Playgroud)

不幸的是,两个结果都不同 任何人都可以给我一个提示吗?

php c# hashcode

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

Nashorn,Java集合,如何在纯javascript中实现equals和hashCode

我遇到了以下问题.我想使用java.util.HashMap,并java.util.PriorityQueue在犀牛脚本,在这里我需要使用特定的自定义对象为在HashMap的关键,并且还使用HashMap.containsKey()以检查是否有在Map中的键(另一种选择是检查的对象Collection.contains(Object o)).

所以,显然,我需要在我的对象中基于一些字段值实现equals和hashCode.

例如:

  1. 试图使用JavaScript.由于JavaScript没有那些方法不起作用.请参阅样品1和样品2

  2. 扩展java.lang.Object.样本3.部分工作,正在调用方法.但

    • 如何使用参数插入构造函数?
    • 如何进行演员:[object Object]到其他:jdk.nashorn.javaadapters.java.lang.Object @ 0,反之亦然?
  3. 在Java中实现我的自定义类并在JavaScript中扩展它.样本4.作品.但如果我必须使用Java,我是否需要Nashorn?

var PriorityQueue = java.util.PriorityQueue;
var HashMap = java.util.HashMap;
var Integer = java.lang.Integer;

// Sample 1
// Doesn't work, equals and hashCode are not being invoked
function Vertex1(from, cost) {
    this.from = from;
    this.cost = cost;

    this.equals = function(other) { return this.from == other.from; }
    this.hashCode = function() { return Integer.hashCode(this.from); } …
Run Code Online (Sandbox Code Playgroud)

javascript java equals hashcode nashorn

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

为什么java hashcode 实现31 * x + y 比x + y 好?

我对关于哪种哈希码实现更好的 Java 面试问题感到困惑。我们有一个类 Point {int x, y; }. 为什么这个类的 hashcode 31 * x + y 的实现比 x + y 好?正确的答案是“乘数创建了哈希码值对字段处理顺序的依赖,这最终会产生更好的哈希函数”。但我不明白为什么处理的顺序是这里的重点,因为当我执行 point1.equals(point2); 时,整个表达式 31 * x + y 正在计算;并且无论它以何种顺序发生。我错了吗?

java hashcode

8
推荐指数
2
解决办法
241
查看次数