public void setProperty(String k,String v){
      //键不重复才往里面加进去
      Set<String> set1 = kv.keySet();
      for(String s:set1){
        if(k.equals(s)){
          kv.remove(s);
          kv.put(k,v);
          return; 
        }
     }
     kv.put(k,v);
   }
帮忙看一下这个程序,我要达到的目的是相同的键是不能再添加进去了,如果遇到相同的键了,就先把这个映射关系给删了,再添加新的映射关系,为什么这个程序不能实现啊??

解决方案 »

  1.   

    不知道能不能用for 循环Set,我没试过,我一般都是用Iterator迭代器
      

  2.   

    这个效率低吧,我用list:list.contains(myMap);
      

  3.   

    最后的   kv.put(k,v);删了
     Set<String> set1 = kv.keySet();
    换成     Set<String> set1 = (Set<String>)(kv.keySet().clone); 试试 
      

  4.   

    for是可以的不过他是java新版本的特性你要考虑到他的兼容问题。。
      

  5.   

    是我不理解还是怎样?最终LZ还是把<k, v>put进去是不是?kv的类型如果是HashMap的话就会把之前的value覆盖掉了,目的已经达到~~LZ说的新事物映射指的是什么?
      

  6.   

    可以的!我测试了一下。通过了!看一下代码:
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;public class MapTest {
    Map<String,String> kv = new HashMap<String,String>();

    public void setProperty(String k,String v){
    //键不重复才往里面加进去
    Set<String> set1 = kv.keySet();
    for(String s:set1){
    if(k.equals(s)){
    kv.remove(s);
    kv.put(k,v);
    return;  
    }
    }
    kv.put(k,v);
    } public static void main(String[] args){
    MapTest mt = new MapTest();
    //设置相同的键测试
    mt.setProperty("example", "example1");
    mt.setProperty("example", "example2");
    mt.setProperty("example", "example3");
    //设置不同的键测试
    mt.setProperty("example4", "example4"); mt.output();
    } public void output(){
    Set<String> set1 = kv.keySet();
    for(String s:set1){
    System.out.println(s+","+kv.get(s));
    }
    }
    }