如果你知道你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);
}
'usedElements'列表的顺序是什么?这很重要......因为在你删除了第一个元素之后,其他的东西都会洗牌...... –
就是这样。所以我发布了这个话题。例如。 usedElements = <0, 2, 1, 4> –