Java 移动 ArrayList 中的元素的方法
Posted 明明如月学长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 移动 ArrayList 中的元素的方法相关的知识,希望对你有一定的参考价值。
原文地址:https://www.baeldung.com/java-arraylist-move-items
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 上找到。
以上是关于Java 移动 ArrayList 中的元素的方法的主要内容,如果未能解决你的问题,请参考以下文章