先请教个小问题 
hashmap如果put(key)的时候表里已经有一个相同的key则value会被替代
这里确实是value被替代吗 key的位置在hashmap里是否会改变?嗯,回归正题
现在是有多key相同 但是value保证唯一性
类型: K int V 一个类
这个是不能用hashmap储存了 
但是获取value的时候只有key的值 而没有value的任何数据 
只需要获取在第一位的key的value值即可
请问用java自带的类型能否实现呢。。如果不能的话请高手指点一下思路 
非常感谢!~

解决方案 »

  1.   

    嗯  补充一下 不是所有key都一样 是存在key重复的情况··
      

  2.   


    value是一个类。。key只是int型的一个整数
      

  3.   

    额 应该说 这里的value是一个类
      

  4.   

    能不能定义个对象,两个属性。
    一个为int型的key
    一个为value(你自定义的类)。
    然后把它放到个List里面去呢
      

  5.   


    这样的话根据key来取值就需要遍历整个list了。执行的效率应该是个考虑的问题!!!
      

  6.   

    这是一个相当小的集合 length基本不超过10 
      

  7.   

    还是希望最好是2参 
    如果这个集合还带有get put  containsKey
    类似的方法就最好了 实在是方便查询
      

  8.   

    Map<key,List<value>>可以不?
      

  9.   

    你需要按照装入的顺序,如果多次装入同一个key的数据,则取第一个,是吧?
    按照你的想法,你在put的时候做一个判断即可。
    if(!map.containsKey(xx)){
        map.put(xx, yourObject);
    }
      

  10.   

        如果你取值的时候,key相同的只取第一个,那么说明其他的就是多余的,永远用不到。这样在保存的时候,应该判断下,这个key是否存在,如果存在就不保存了,如果不存在,再保存。这样hashmap就可以满足你的要求了啊。
         很多时候换个思维方式就解决问题了.............
      

  11.   


    一个key对应一个value``` 另外key有相同的 不能用Map呢
      

  12.   


    取了第一个key的value之后会把这个key消除 等于说下次再去就是取第二个相同key的value的
    不好意思 我没把条件说完整。。
      

  13.   

    嗯,你这么补充的就完整了,那这样的话,你应该用List<Map>保存你的数据,读取的时候,从第一个map开始,看看key是否相同,不相同就继续,相同的话,取出value,然后删除这个map,下次取值的时候同样........
      

  14.   

    那就Key是key,value是List 每次取出头并删除 
      

  15.   


    嗯 谢谢你  不过由于取了第一个key的value之后会把这个key消除 所以也要用到剩下的相同key的value的··
      

  16.   

    回16 17 L 这样不是每次都要遍历list么。。
      

  17.   

    如果你确实需要,遍历就遍历呗,计算机做,只要你的list数量级不是很大,很快的,又不是手工做,......如果list的记录很多(比如上千条),就不要读到程序里了,存在数据库中,查询一下好了,......
      

  18.   

    遍历什么?插入时插入在尾部,删除时从头部删除,没看出要遍历啊Map<int, List<ValueClass>>when insert:
    List<ValueClass> l = get(key);
    l.add(value);when get:
    List<ValueClass> l = get(key);
    value = l[0];
    l.remove(0);
      

  19.   

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    public class MapValueListTest {
        private static class Person{
         private int id;
         private String name;
         public Person(int id,String name){
         this.id = id;
         this.name = name;
         }
         public String toString(){
         return "[id:"+id+",name:"+name+"]";
         }
        }
        private static class MapValueList<K,V>{
         private Map<K,List<V>> map = new HashMap<K,List<V>>();
         public void put(K key,V p){
         List<V> valueList = map.get(key);
         if(valueList == null){
         valueList = new ArrayList<V>();
         map.put(key, valueList);
         }
         valueList.add(p);
         }
         public V get(K key){
         List<V> valueList = map.get(key);
         if(valueList == null)return null;
         return valueList.get(0);
         }
         public List<V> getAll(K key){
         List<V> valueList = map.get(key);
         if(valueList == null)return null;
         return valueList;
         }
         public V remove(K key){
         List<V> valueList = map.get(key);
         if(valueList == null)return null;
         return valueList.remove(0);
         }
         public void removeAll(K key){
         map.remove(key);
         }
         public boolean containsKey(K key){
         return map.containsKey(key);
         }
        }
    public static void main(String[] args) {
    MapValueList<Integer,Person> map = new MapValueList<Integer,Person>();
    map.put(1, new Person(1,"aaa"));
    map.put(1, new Person(2,"bbb"));
    map.put(2, new Person(3,"ccc"));
    System.out.println(map.containsKey(1));
    System.out.println(map.get(1));
    System.out.println(map.getAll(1));
    map.remove(1);
    System.out.println(map.getAll(1));
    map.remove(1);
    System.out.println(map.getAll(1));
    map.removeAll(2);
    System.out.println(map.getAll(2));
    }}