qq_35058792
2016-09-23 04:47
采纳率: 100%
浏览 1.9k
已采纳

Map和list一起用的问题


Map<String, Boolean> map = new HashMap<>();
map.put("0", true);
map.put("1", true);
map.put("2", true);
map.put("3", false);

List<String> list = new ArrayList<>();
list.add("红色");
list.add("蓝色");
list.add("绿色");
list.add("紫色");


                            Map里面键 对应这 list里面的下标  true的时候让list里面对应的下标删除  怎么 写啊 求求大神救救我吧 我都纠结两天了
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • 王_超 2016-09-23 07:58
    已采纳

    看看我的代码有没有解决你的问题。

    
        public static void main(String[] args) {
            Map<String, Boolean> map = new HashMap<String, Boolean>();
            map.put("0", true);
            map.put("1", true);
            map.put("2", true);
            map.put("3", false);
    
            List<String> list = new ArrayList<String>();
            list.add("红色");
            list.add("蓝色");
            list.add("绿色");
            list.add("紫色");
    
            List<String> list1 = new ArrayList<String>();
            Map<String, String> map1 = new HashMap<String, String>();
            for(int i=0;i<map.size();i++){
                if(map.get(i+"")){
                    map1.put(""+i, ""+i);
                    list1.add(list.get(i));
                }
            };
            list.removeAll(list1);
            for(int i=0;i<map1.size();i++){
                map.remove(map1.get(""+i));
            }
    
            System.err.println(map.toString());
            System.err.println(list.toString());
        }
    
    
    点赞 打赏 评论
  • Veggiel 2016-09-23 05:29

    你这样设计是不合理的如果map的键对应list的下标,那么list.remove()方法会让list的size()减小,这样第一次删除list里面一个数据之后list.size()就会-1,这样map中的键和list的下标就不能一一对应了

    点赞 打赏 评论
  • NewshiJ 2016-09-23 05:34

    可以考虑用list集合存放boolen值当值是true时两个list集合一起删除就可以防止楼上说的那种情况

    或者是在list集合内放置map就一起解决了

    点赞 打赏 评论
  • 春水_ 2016-09-23 05:35

    for(int i=0;i<list.size();i++){
    if(map.containsKey(i+"") && StringUtils.equals(map.get(i+"").toString(), "true")){
    list.remove(i);
    }
    }

        for(String s:list){
            System.out.println(s);
        }
    
    点赞 打赏 评论
  • 春水_ 2016-09-23 05:42

    新添加到一个list 不就好了 原本不动
    List list1 = new ArrayList<>();
    for(int i=0;i<list.size();i++){
    if(map.containsKey(i+"") && StringUtils.equals(map.get(i+"").toString(), "false")){
    list1.add(list.get(i));
    }
    }

        for(String s:list1){
            System.out.println(s);
        }
    
    
    
    点赞 打赏 评论
  • Veggiel 2016-09-23 06:04

    如果你非要那么倔强的话 你这么干

     int listSize = list.size();
        int len = 0;
        for(int i=0;i<listSize;i++){
            if(map.containsKey(i+"") && "true".equals(map.get(i+"").toString())){
            list.remove(i-len);
            len++;
            }
            }
        System.out.println(list);
    
    点赞 打赏 评论
  • 丵鹰 2016-09-23 07:53

    把map设置的key值与list添加的值一样
    map.get(map.containsKey(list.get(i)))==true 就删除

    点赞 打赏 评论
  • 荼荼小蘼 2016-09-24 02:57

    倒序遍历list即可解决问题

    点赞 打赏 评论

相关推荐 更多相似问题