如果您知道您的usedElements
列表是按升序排列的,那么最简单的方法是以相反的顺序删除元素 - 这样“洗牌”效果不会影响后面的任何操作:
List<Double> elements = ...;
List<Integer> usedElements = ...;
for (int i = usedElements.size() - 1; i >= 0; i--) {
elements.remove(usedElements.get(i));
}
如果当前usedElements
没有排序,最好先排序。如果usedElements
当前未排序并且您出于其他原因需要维护其当前顺序,则首先创建一个副本,然后对其进行排序:
List<Double> elements = ...;
List<Integer> usedElements = ...;
List<Integer> sortedUsedElements = new ArrayList<Integer>(usedElements);
Collections.sort(sortedUsedElements);
for (int i = sortedUsedElements.size() - 1; i >= 0; i--) {
elements.remove(sortedUsedElements.get(i));
}
甚至以相反的顺序对副本进行排序并使用增强的 for 循环:
List<Double> elements = ...;
List<Integer> usedElements = ...;
List<Integer> sortedUsedElements = new ArrayList<Integer>(usedElements);
Collections.sort(sortedUsedElements, Collections.<Integer>reverseOrder());
for (Integer index : sortedUsedElements) {
elements.remove(index);
}