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 中的元素的方法的主要内容,如果未能解决你的问题,请参考以下文章

java ArrayList数组中如何插入一个元素

用啥方法可以替换掉 arraylist中的一个元素

每天一道java面试题

列举几个关于Java Collections的常见问题并给出答案

Java中的ArrayList 重要方法补充

在Java中怎么修改ArrayList()中元素的值?