0
点赞
收藏
分享

微信扫一扫

Java 移动 ArrayList 中的元素的方法


1. 概述

Java为我们提供了一系列在 ​​ArrayList​​ 中重新排列元素的方法。在本教程中,我们将介绍其中的三个。

2. 移动元素

最原始的方法,也是给我们最常用工的方法,是将元素直接移动到新位置。**我们可以通过首先使用 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​​ 保持其原始长度。

3. 交换两个元素

我们可以使用 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 中的项目,并确认列表看起来符合我们的预期。

4. 旋转整个 List

**最后,我们还可以将旋转应用于列表,将所有元素移动给定的距离。**距离没有限制。因此,如果需要,我们可以多次循环所有内容。正距离将根据我们的视角将项目向右或向下旋转列表:

@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);
}

5. 结论

在本文中,我们了解了 Java 为我们重新排序 ​​ArrayList​​​ 提供的三个选项。出于性能原因,如果可能的话,我们应该考虑使用 ​​swap()​​​ 或 ​​rotate()​​​。如果我们想要更自由地控制元素,或者只有一个元素在移动,那么我们学习了如何使用 ​​remove()​​​和 ​​add()​​​ 手动将元素移动到我们需要的任何位置。
这些示例的完整代码可在 ​​​GitHub 上​​找到。


举报

相关推荐

0 条评论