如果你知道你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> –