我正在使用NamedCache.get(cacheKey)和NamedCache.put(cacheKey, cacheValue),并在cacheKey对象中重写hashCode和equals方法,这也使cacheKey对象可序列化。但是hashCode和equals方法没有被调用。
为什么会发生这种情况?
我正在为上述问题张贴一个示例代码。
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中一样。
发布于 2016-06-17 14:21:29
据我从这文章中了解,当您调用put时,NamedCache不会调用hashCode。
而且,根据本文,您必须注意hashCode和equals是如何实现的。
https://stackoverflow.com/questions/37869196
复制相似问题