首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在序列化对象中重写hashCode和equals方法?

如何在序列化对象中重写hashCode和equals方法?
EN

Stack Overflow用户
提问于 2016-06-16 20:55:41
回答 1查看 1.8K关注 0票数 0

我正在使用NamedCache.get(cacheKey)NamedCache.put(cacheKey, cacheValue),并在cacheKey对象中重写hashCodeequals方法,这也使cacheKey对象可序列化。但是hashCodeequals方法没有被调用。

为什么会发生这种情况?

我正在为上述问题张贴一个示例代码。

代码语言:javascript
复制
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;

class HelloEx implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 6280029994647038136L;
    String str  = "HelloEx" ; 

    HelloEx(String s){
        str = s ; 
    }


    public int hashCode() {
        System.out.println("Inside HashCode");
        return 1;

    }


    public boolean equals(Object  o) {
        HelloEx s = (HelloEx)o ;
        if(str.equals(s.str)){
            System.out.println("Both are equal");
            return true; 
        }
        return false;
    }


}


public class HashSetEg {

    public static void main(String[] args) {

        HelloEx hEx4 = new HelloEx("Four");
        HelloEx hEx5 = new HelloEx("Five");
        HelloEx hEx6 = new HelloEx("Six");

        Map hp = new HashMap();
        hp.put(hEx4,hEx4); 
        hp.put(hEx5,hEx5);
        hp.put(hEx6,hEx6);
        hp.put(hEx6,hEx6);
        System.out.println("Test");
        hp.get(hEx6);
        hp.put(new String("aa"),new String("aa"));
        System.out.println("Test");
        //System.out.println("HashSet " +  hp  );


            NamedCache aggCache  = CacheFactory.getCache("MyCache");
        aggCache.put(hEx4,hEx4);
        aggCache.put(hEx6,hEx6);
        aggCache.put(hEx6,hEx6);
        System.out.println("End");
    }
}

上述代码的输出是:

内部HashCode

内部HashCode

内部HashCode

内部HashCode

测试

内部HashCode

测试

结束

此代码使用oracle coherence.jar technology.So NamedCache,它是在coherence服务器上保存创建的缓存引用的接口,该接口将由应用程序使用,而"CacheFactory.getCache("MyCache")“用于在coherence服务器上创建一个名为MyCache的缓存,而在这个缓存中,我们存储键值对,就像我们将数据存储在HashMap中一样。

EN

回答 1

Stack Overflow用户

发布于 2016-06-17 14:21:29

据我从文章中了解,当您调用put时,NamedCache不会调用hashCode

而且,根据本文,您必须注意hashCodeequals是如何实现的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37869196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档