有很多key, 例如 1 , 2 , 3 ,4 ,5等  就像遥控器上面的各种按键 和 数字键
各个key 有些有code,有些key是没有code的 假设 1 是没有code 的,3和4 有code。但是一个key都是对应一个code .
 我拿到3 和 4 的code就有有两个code,但是我想把这两个code同时设置给 1  这个key. 
 那 1 这个key上面就存了两个 code 了,不会覆盖掉。我该怎么把这两个code设置给 1 这个key 呢?

解决方案 »

  1.   

    Map:元素是键值对 key:唯一,不可重复 value:可重复
      遍历:先迭代遍历key的集合,再根据key得到value
      

  2.   


    那你就把3和4的code当字符串连接起来作为key赋给1
      

  3.   


    import java.util.HashMap;
    import java.util.Map;
    import java.util.Vector;public class TestMap {
    private static Map map  = new HashMap();

    // 一个key都是对应一个code 
    /**
     * 获得该Key的值
     */
    public Vector getCodeForKey(String key){ return (Vector)map.get(key);
    }
      // 我该怎么把这两个code设置给 1 这个key 
    //存储 值放在一个Vector里面
    /**
     * 
     * @param key
     * @param codes key的value
     * @param object
     */
    public void setCodesForKey(String key,Object object){
    Vector codes =new Vector();
    if(null!=map.get(key)){
     codes= (Vector)map.get(key);
    codes.addElement(object);
    }else{
    codes.add(object);

    }
    map.put(key, codes);
    }
    /**
     * 删除该键对应的所有值
     * @param key
     */
    public void deleteCodesForKey(String key){

    map.remove(key);
    }
    //测试
    public static void main(String[] args) {
    TestMap testMap  = new TestMap();

    testMap.setCodesForKey("a",  1);
        testMap.setCodesForKey("a",  2);
        testMap.setCodesForKey("a",  2);
        //获取该key的所有值
    Vector vector=testMap.getCodeForKey("a");
    for (int i = 0; i < vector.size(); i++) {
    System.out.println(vector.elementAt(i).toString());
    }

    }
    }
      

  4.   

    2 楼说的,我也想 可以直接连接起来行不,但是code 是一个Code对象
    怎么连接呢?我也有点想不明白。我输入几个数字 就拿这几个数字的code.我能根据我选择的数字把code拿到,我是把它们存在数组里面了
    但是要把所拿到的那些Code都放到一个Key上面去,我就有点想不明白怎么放。
    我的Key里面有 key.setCode(Code code); 这个方法,就是给Key设置Code的。
    public class RemoteKeyCode extends Code{    public RemoteKeyCode() {
        }
        private byte keyBlocklength;
        private byte[] remoteCode;    /**
         * 得到要控码的byte长度
         * @return byte长度
         */
        public int getKeyBlocklength() {
            return (int) keyBlocklength;
        }    /**
         * 遥控码的byte数组
         * @return 码的byte数组
         */
        public byte[] getRemoteCode() {
            return remoteCode;
        }    /**
         * Set Method
         */
        public void setKeyBlocklength(byte keyBlocklength) {
            this.keyBlocklength = keyBlocklength;
        }    /**
         * Set Method
         */
        public void setRemoteCode(byte[] remoteCode) {
            this.remoteCode = remoteCode;
        }    /**
         * 向byte数组转化
         * @return byte数组
         */
        public byte[] toBinary() {
            return getRemoteCode();
        }
    }
      

  5.   

    我已经帮你写好了啊
    value 为一个Vector  里面放的是对象,无论是什么值也好类也好
      

  6.   


    既然Code是个对象,而且你已知的Code肯定是有个范围的,那就建立一些常量,把哪些没有对应Code的键也虚拟一些Code不就可以了吗?
      

  7.   

    4楼说的那种Map里面的,好像有点面白你的意思。但是又有点迷糊。
      用键值对,键用keyNo,值就是获取的多个Code .
    那这样的话 在Key里面setCode的那里就要改动存储方式?   但是我的key是 key.setCode(Code code),直接就存储Code.如果直接就是这样拿着Key.setCode()的话,那不是就会覆盖了?
      

  8.   

    每个Key都有code。只是有的Code是为null. 
      

  9.   


     public void setCodesForKey(String key,Object object){
            Vector codes =new Vector();
            if(null!=map.get(key)){
             codes=    (Vector)map.get(key);
                codes.addElement(object);
            }else{
                codes.add(object)  
            }
            map.put(key, codes);
        }
      //测试
        public static void main(String[] args) {
            TestMap testMap  = new TestMap();
            
            testMap.setCodesForKey("a",  1);
            testMap.setCodesForKey("a",  2);
            testMap.setCodesForKey("a",  2);
            //获取该key的所有值
            Vector vector=testMap.getCodeForKey("a");
                for (int i = 0; i < vector.size(); i++) {
                    System.out.println(vector.elementAt(i).toString());
                }
            
        }值是一个vector vector里面是值(对象)的集合
    请看我给你写的例子:
     //获取该key的所有值  它返回的是一个值的集合
            Vector vector=testMap.getCodeForKey("a");
      

  10.   

    自己定义一个MyMap<int,ArrayList>,使其继承HashMap.ArrayList中放你的Code
      

  11.   

    有点懂你说的意思。我是多个Key的每个Code,放到一个Key里面。     public void setCodesForKey(Key key,Object object){
            Vector codes =new Vector();
            if(null!=map.get(key)){
             codes=    (Vector)map.get(key);      
                codes.addElement(object);
            }else{
                codes.add(object)  
            }
            map.put(key, codes);    // 这样是不是把一个key的多个Code放到map里面? 但是map又放到哪里?
                                        //那我这个key就对应了有codes了吗?还是在我的Key里面设置Code 改为键值对的。我想理解一下这种解决方式的思想。好像还是没能透。
       public Class Key{
       private Code code = null;
         public Code getCode() {
            return code;
        }    public void setCode(Code code) {  //这里存储呢? 我想明白一点。 谢谢了!
            this.code = code;
        }}    }
      

  12.   

    LZ您的:
    有很多key, 例如 1 , 2 , 3 ,4 ,5等  就像遥控器上面的各种按键 和 数字键 
    各个key 有些有code,有些key是没有code的 
    这样是不是把一个key的多个Code放到map里面?我是模型是
    map<key,Object>Object为一Vector的集合(一对多)也可以用其它集合类代替(一个key的多个Code放到key对应的值(Object)里面,而该Object是一个Vector可以放多个值)但是map又放到哪里?map的获取:
    LZ我声明的是 private static Map map  = new HashMap();
    可以这样获取
    TestMap.map 获取所有的key:
    public Iterator getAllKey(){
    return map.keySet().iterator();
    }
      

  13.   

    我是模型是 
    map <key,Object> Object为一Vector的集合(一对多)也可以用其它集合类代替(一个key的多个Code放到key对应的值(Object)里面,而该Object是一个Vector可以放多个值) 
    codes=    (Vector)map.get(key);  这样?
    但是我从key上面得到的话,那些key对应只有一个code.也就是 key.getCode();这个key是只有一个,而且也只有一个code、
    假设我要得到两个key的两个Code,那就得传入两个key,才能拿到两个code,那我还顺便想问下,我该怎么传入key?
      

  14.   

     //测试
        public static void main(String[] args) {
            TestMap testMap  = new TestMap();
            
            testMap.setCodesForKey("a",  1);
            testMap.setCodesForKey("a",  2);
            testMap.setCodesForKey("c",  2);
            //获取该key=="a"的所有值
            Vector vector=testMap.getCodeForKey("a");
                for (int i = 0; i < vector.size(); i++) {
                    System.out.println(vector.elementAt(i).toString());
                }
            
        }我该怎么传入key?
    key的值---和 值的值--是自己放进去的啊

    有很多key, 例如 1 , 2 , 3 ,4 ,5等  就像遥控器上面的各种按键 和 数字键 

    这不是你的key的值吗?
      

  15.   

    是的RemoteKeyCode[] code = new RemoteKeyCode[cs.length];
        for (int j = 0; j < cs.length; j++) {
            for (Key hardKey : hardKeys) {
                String hardKeyContext = hardKey.getContext().toString();
                if (str[j].trim().equals(hardKeyContext.trim())) {
                    
                    code[j] = (RemoteKeyCode) hardKey.getCode();
                }
            }
        }hardKey就是我获得那些key,拿到key了 也就能拿到code。testMap.setCodesForKey("a",  1); 
            testMap.setCodesForKey("a",  2); 
            testMap.setCodesForKey("c",  2); 
    这样设置就不对了吧?这样是拿不同的key吗?
      

  16.   

    请看我的方法说明testMap.setCodesForKey("a",  1); 
            testMap.setCodesForKey("a",  2); 
            testMap.setCodesForKey("c",  2); 
    a c 为key 1 2 2 为
     如果key相同的,值在vector叠加LZ你的key自己想怎么设置都行,这是一个封装的map
    您的key是1 2  3 4   5 6  7  是吧就像手机上的健你可以用1 代ABC 用2 代 DEF ....
    我提供的是模型具体操作我不知道您的需求这是我最后一次回该帖子了LZ您如果还有疑问,问问其它朋友吧
    谢谢!
      

  17.   

    xnjnmn 谢谢您的热心解答!
     你讲的模型我明白,可能是跟我的需求有关,我就得琢磨怎么处理了。谢谢!