有哪个集合功能像hashtable,但key键是可以重复的?

解决方案 »

  1.   

    只要不是Map下的都可以,
    List,Set....
      

  2.   

    忘了说了
    key键一定要能用字符串的,而不能用int
      

  3.   

    你是想实现什么功能,
    hashtable的key一定是不能重复的。但是由key对应的对象的内容可以重复,只要key不同就可以
      

  4.   

    我就是要key能重复,难道没这样的集合类?
      

  5.   

    key和value只会交叉重复,而不会完全一样的重复。
    总之我需要这样的功能,有哪位知道有这样的集合,或者好的开源程序?
      

  6.   

    import com.sun.tools.javac.v8.util.Hashtable;
    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重复次数.不知这样可否?
      

  7.   

    非常抱歉,是:
    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);
        }}
      

  8.   

    ......如题,
        出于好奇冒昧的问一下,是什么问题导致需要使用一个拥有重复 key 的 hashtable ?
    @.@||~
      

  9.   

    你懂key什么意思么,不就是键么,键能重复么,如果重复怎么查找
    你可以自己写一个二维数组来实现你要的效果,或用链表,看到你的马甲上写着你是个优秀的程序员,我想你应该会做,就不给代码了
      

  10.   

    to yangbc(土豆块):兄弟,我这句周氏幽默为何你不懂得欣赏……!我索性将原因说下,网站后台有个role表如下:
    userid  --  type  --  level
    exist      flash        1
    haitang    game         1
    java       game         2也就是说用户登陆后,是有很多个管理员角色……!
    我该如何做,我把他放在key能重复的集合中,然后一循环,如果游戏类型中有1级别就允许进入1级别子页面,这么做不合理吗,我没什么经验,请指教……!( midthinker(呵呵)
      

  11.   

    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的分离链接实现。
        祝您好运 ^^
        @.@||~