我有 2 个 ArrayList,一个包含 String
,另一个包含 Integer
。 list2
包含 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/