非常抱歉,是: public class TestHash { private Hashtable hash = new Hashtable(); public void put(String key,Object value) { ArrayList arr = null; if ((hash.keys().toString()).equals(key)) {
to yangbc(土豆块):兄弟,我这句周氏幽默为何你不懂得欣赏……!我索性将原因说下,网站后台有个role表如下: userid -- type -- level exist flash 1 haitang game 1 java game 2也就是说用户登陆后,是有很多个管理员角色……! 我该如何做,我把他放在key能重复的集合中,然后一循环,如果游戏类型中有1级别就允许进入1级别子页面,这么做不合理吗,我没什么经验,请指教……!( midthinker(呵呵)
TO jsp_servlet_javabean 呵呵,瞧,把问题与产生的原因说清楚,可以省了不少麻烦,但多少还是有些问题。 首先,我还不是最清楚问题域,不过可以先以我的理解叙述一下问题域:假设key = userid,您是希望访问某一/些需要检查访问权限的页面的某一/些角色,通过key(userid),映射到相应的权限,并通过检查映射到的权限来限制或允许页面的访问与操作,但由于某一/些角色拥有许多实体,所以您又希望一类实体都可以被映射到同一权限。 如果是这样,那有许多种解决方案。(这里我并不清楚,您映射的key字段为何) 这里就只说说按照您原来的想法,维护一份可重复key的hashtable,但是一般这不叫可重复key,您可用分离链接法解决这个问题,通过维护一个hashtable,并对每个key维护一份value array OR value linked list,比如说假设hash函数中 1、11、21 都映射到同一个key = 1,那么我们可以在key = 1中维护一份list(array or linked list),并依次将上述关键字至于其内。 该数据结构的插入操作时,首先需要寻找到key,这需要花费常数时间O(c),然后将该值插入到此key所维护的列表中,基本花费O(1)的时间,所以整个插入操作的效率相当高。 查询时,只需要先映射到该key所维护的列表中,这需要花费常数时间O(c),然后在依次循环查找对应于此key的列表,最坏情况是需要花费O(n)的线性时间,所以这个数据结构在查询端的最坏运行时间界是O(n) n为list的长度。 重新造轮子可能比较痛苦,目前JAVA的Collection库中也好象没有相应的类(也可能是因为该结构在find操作时由于需要花费线性的时间而导致Hashtable的好处完全被掩盖了,所以应用面不是很广的缘故),您可以参考《数据结构与算法分析——Java语言描述》(Mark Allen Weiss著,机械工业出版社)中 P133 ~ 136页,hashtable的分离链接实现。 祝您好运 ^^ @.@||~
List,Set....
key键一定要能用字符串的,而不能用int
hashtable的key一定是不能重复的。但是由key对应的对象的内容可以重复,只要key不同就可以
总之我需要这样的功能,有哪位知道有这样的集合,或者好的开源程序?
import java.util.ArrayList;public class TestHash
{
private Hashtable hash = new Hashtable();
public void put(String key,Object value)
{
ArrayList arr = null;
if (hash.keys().equals(key))
{
arr = (ArrayList) getArray(key);
arr.add(value);
hash.put(key,arr);
}
else
{
arr = new ArrayList();
arr.add(value);
hash.put(key,value);
}
} public ArrayList get(String key)
{
ArrayList arrReturn = (ArrayList) hash.get(key); return arrReturn;
} private ArrayList getArray(String key)
{
return (ArrayList)hash.get(key);
}
}其中,get方法返回的是一个ArrayList,里面放有对应于相同key的不同对象.
ArrayList长度等于key重复次数.不知这样可否?
public class TestHash
{
private Hashtable hash = new Hashtable();
public void put(String key,Object value)
{
ArrayList arr = null; if ((hash.keys().toString()).equals(key))
{
arr = (ArrayList) getArray(key);
arr.add(value);
hash.put(key,arr);
}
else
{
arr = new ArrayList();
arr.add(value);
hash.put(key,arr);
}
} public ArrayList get(String key)
{
ArrayList arrReturn = (ArrayList) hash.get(key); return arrReturn;
} private ArrayList getArray(String key)
{
return (ArrayList)hash.get(key);
}}
出于好奇冒昧的问一下,是什么问题导致需要使用一个拥有重复 key 的 hashtable ?
@.@||~
你可以自己写一个二维数组来实现你要的效果,或用链表,看到你的马甲上写着你是个优秀的程序员,我想你应该会做,就不给代码了
userid -- type -- level
exist flash 1
haitang game 1
java game 2也就是说用户登陆后,是有很多个管理员角色……!
我该如何做,我把他放在key能重复的集合中,然后一循环,如果游戏类型中有1级别就允许进入1级别子页面,这么做不合理吗,我没什么经验,请指教……!( midthinker(呵呵)
呵呵,瞧,把问题与产生的原因说清楚,可以省了不少麻烦,但多少还是有些问题。
首先,我还不是最清楚问题域,不过可以先以我的理解叙述一下问题域:假设key = userid,您是希望访问某一/些需要检查访问权限的页面的某一/些角色,通过key(userid),映射到相应的权限,并通过检查映射到的权限来限制或允许页面的访问与操作,但由于某一/些角色拥有许多实体,所以您又希望一类实体都可以被映射到同一权限。
如果是这样,那有许多种解决方案。(这里我并不清楚,您映射的key字段为何)
这里就只说说按照您原来的想法,维护一份可重复key的hashtable,但是一般这不叫可重复key,您可用分离链接法解决这个问题,通过维护一个hashtable,并对每个key维护一份value array OR value linked list,比如说假设hash函数中 1、11、21 都映射到同一个key = 1,那么我们可以在key = 1中维护一份list(array or linked list),并依次将上述关键字至于其内。
该数据结构的插入操作时,首先需要寻找到key,这需要花费常数时间O(c),然后将该值插入到此key所维护的列表中,基本花费O(1)的时间,所以整个插入操作的效率相当高。
查询时,只需要先映射到该key所维护的列表中,这需要花费常数时间O(c),然后在依次循环查找对应于此key的列表,最坏情况是需要花费O(n)的线性时间,所以这个数据结构在查询端的最坏运行时间界是O(n) n为list的长度。
重新造轮子可能比较痛苦,目前JAVA的Collection库中也好象没有相应的类(也可能是因为该结构在find操作时由于需要花费线性的时间而导致Hashtable的好处完全被掩盖了,所以应用面不是很广的缘故),您可以参考《数据结构与算法分析——Java语言描述》(Mark Allen Weiss著,机械工业出版社)中 P133 ~ 136页,hashtable的分离链接实现。
祝您好运 ^^
@.@||~