2 qq 35058792 qq_35058792 于 2016.09.23 12:47 提问

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个回答

A01014170
A01014170   2016.09.23 15: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
Veggiel   2016.09.23 13:29

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

ling_xiaoyan
ling_xiaoyan 回复Veggiel: 换个思路,倒序遍历list就可以解决啦
大约一年之前 回复
Veggiel
Veggiel 回复ridish: 我在5楼重新解答了
大约一年之前 回复
ridish
ridish 恩,没错?
大约一年之前 回复
qq_35058792
qq_35058792 刚开始的时候是对应的 之后不对应没有关系
大约一年之前 回复
yue369
yue369   2016.09.23 13: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);
    }
cmmchenmm
cmmchenmm   2016.09.23 13:34

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

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

yue369
yue369   2016.09.23 13: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
Veggiel   2016.09.23 14: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);
strutce
strutce   Ds   Rxr 2016.09.23 15:53

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

ling_xiaoyan
ling_xiaoyan   2016.09.24 10:57

倒序遍历list即可解决问题

Csdn user default icon
上传中...
上传图片
插入图片