java - Java中的ArrayList删除元素

标签 java arraylist

我有 2 个 ArrayList,一个包含 String,另一个包含 Integerlist2 包含 list1 元素的索引。

现在我需要从 list1 中删除索引位于 list2 中的所有元素。有什么想法吗?

ArrayList<String> list1 = new ArrayList<String>(); 
list1.add("a");
list1.add("b");
list1.add("c");
list1.add("d");
list1.add("e");
list1.add("f");

ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(1);
list2.add(4);
list2.add(2);

这里的问题是,您无法从原始 list1 中删除,因为索引会不断变化。我尝试创建一个临时 HashMap 来存储数组索引和 String 关系。

我迭代list2 和map。当我找到匹配的 key=index 时,我跳过了它。否则我将 String 元素放入新列表中。

还有更好的建议吗?

最佳答案

list2 进行排序,并从 list1 中从 list2 中给定的最高索引开始删除项目。 这样您在 list1 中的其他相关索引就不会改变。

你可以这样做:

    Collections.sort(list2, Collections.reverseOrder());
    for (Integer i : list2) {
        list1.remove((int) i);
    }

编辑:

正如 David Wallace 在评论中指出的,上述方法仅在 list2 中没有重复项时才有效。您可以通过在上面发布的代码之前添加以下行来消除重复项:

list2 = new ArrayList<>(new HashSet<>(list2));

关于java - Java中的ArrayList删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13892352/

相关文章:

java - Jersey Restful : Spring bean creation management

java - 解析 .rdfs 文件

java - 限制我的游戏的 FPS

java - 无法使用 request.getParameter() 或 request.getAttributes() 从同一个 Servlet 中检索数据,尝试都只获取 null

java - 使用来自另一个类的变量在构造函数中创建数组列表?

java - Math.pow() 不工作?

java - 使用数组列表进行 Junit 测试

java - 如何根据 ArrayList 中的时间表一次打印一行?

java - 原始数组与 ArrayList

java - 将 JTextArea 中的文本存储为数组列表