关于Jive论坛中CACHE Hash机制的一个疑问

05-03-18 henry_xy
ThreadMode1.jsp:

ForumThread thread = forum.getThread(threadID);

...

DBForumFactory.java:

DbForumThread thread = cacheManager.threadCache.get(threadID);

ForumThreadCache.java:

DbForumThread thread = (DbForumThread)cache.get(threadID);

LongCache.Java:

LongCacheObject cacheObject = (LongCacheObject)cachedObjectsHash.get(key);

public final Object get(long key) {

int i = indexOfKey(key); //问题在这里,按照HASH算法,有可能是多个thread id(key)对应一个hash值i的

//If not in the map return null

if (i<0) {

return null;

}

else {

return values;//而这里直接返回了一个i的object,怎么能保证这个object就是唯一的呢?不会是每次遇到

重复的hash值就把上次的覆盖掉吧??就是不懂这里,请高手指点指点

}

}

henry_xy
2005-03-18 12:56
return values;

而这里直接返回了一个i的object,怎么能保证这个object就是唯一的呢?不会是每次遇到重复的hash值就把上次的覆盖掉吧??就是不懂这里,请高手指点指点

奇怪了,Jive会过滤"这个字符串?

henry_xy
2005-03-18 12:58
return values(i);

只能用圆括号,不能用方括号,郁闷

henry_xy
2005-03-20 13:20
不会吧,这里应该有很多JIVE的高手的啊.

BANQ大哥我买了你的书了,但是书里面没有讲的那么详细,

你能否帮我解释一下这个HASH算法是怎样的.

我最近研究了一下好像这个HASH是动态增长的,当UNIQUE KEY达到最大限制后就动态扩展HASH TABLE了?是这样吗?

banq
2005-03-21 16:24
不必了解Hash算法,Key值是唯一的,这段代码主要是key获得比较琐碎,它肯定是唯一的,你细心看看

henry_xy
2005-03-23 00:00
但是objects(i)是一个数组啊, 怎么能保证只有唯一值呢?

除非这个数组是动态增长的,我这样理解可以吗?

另外为什么不直接用其他的INDEX来行而要用动态扩展的数组?这个性能肯定是不好的吧?

henry_xy
2005-03-24 13:24
我正在打算修改JIVE的CACHE 部分的代码, 哪位能解释一下我的疑问呢?

猜你喜欢