原文地址:https://www.baeldung.com/java-arraylist-move-items
Java为我们提供了一系列在 ArrayList
中重新排列元素的方法。在本教程中,我们将介绍其中的三个。
最原始的方法,也是给我们最常用工的方法,是将元素直接移动到新位置。**我们可以通过首先使用 ArrayList.remove() 来做到这一点,它返回已删除的项目。然后我们可以用 ArrayList.add()
将该项重新插入到我们选择的位置:
@Test
void givenAList_whenManuallyReordering_thenOneItemMovesPosition() {
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList("one", "two", "three", "four", "five"));
String removed = arrayList.remove(3);
arrayList.add(2, removed);
ArrayList<String> expectedResult = new ArrayList<>(Arrays.asList("one", "two", "four", "three", "five"));
assertEquals(expectedResult, arrayList);
}
底层 ArrayList
_使用数组。这意味着删除和插入项目会产生很大的开销,因为移动所有其他元素。出于这个原因,如果可能的话,我们应该避免使用这种方法,并使用以下两个方法之一,它们都使 ArrayList
保持其原始长度。
我们可以使用 Collections.swap()
来交换 ArrayList
中两个项目的位置。swap()
方法有三个参数,首先是要调整的 ArrayList
,然后是要交换的两个元素的位置:
@Test
public void givenAList_whenUsingSwap_thenItemsSwapPositions() {
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList("one", "two", "three", "four", "five"));
Collections.swap(arrayList, 1, 3);
ArrayList<String> expectedResult = new ArrayList<>(Arrays.asList("one", "four", "three", "two", "five"));
assertEquals(expectedResult, arrayList);
}
在这里,我们交换了位置 1 和 3 中的项目,并确认列表看起来符合我们的预期。
**最后,我们还可以将旋转应用于列表,将所有元素移动给定的距离。**距离没有限制。因此,如果需要,我们可以多次循环所有内容。正距离将根据我们的视角将项目向右或向下旋转列表:
@Test
void givenAList_whenUsingRotateWithPositiveDistance_thenItemsMoveToTheRight() {
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList("one", "two", "three", "four", "five"));
Collections.rotate(arrayList, 2);
ArrayList<String> expectedResult = new ArrayList<>(Arrays.asList("four", "five", "one", "two", "three"));
assertEquals(expectedResult, arrayList);
}
在这里,这些项目都向右移动了两个位置,一旦到达终点,就会循环回到起点。或者,如果需要,我们也可以以负距离向左旋转:
@Test
void givenAList_whenUsingRotateWithNegativeDistance_thenItemsMoveToTheLeft() {
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList("one", "two", "three", "four", "five"));
Collections.rotate(arrayList, -2);
ArrayList<String> expectedResult = new ArrayList<>(Arrays.asList("three", "four", "five", "one", "two"));
assertEquals(expectedResult, arrayList);
}
在本文中,我们了解了 Java 为我们重新排序 ArrayList
提供的三个选项。出于性能原因,如果可能的话,我们应该考虑使用 swap()
或 rotate()
。如果我们想要更自由地控制元素,或者只有一个元素在移动,那么我们学习了如何使用 remove()
和 add()
手动将元素移动到我们需要的任何位置。
这些示例的完整代码可在 GitHub 上找到。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有