如何在ArrayList之前添加另一个ArrayList?

hap*_*dha 0 java arraylist

我希望将一个L1 的元素放在另一个L2的前面,但我找不到开箱即用的方式来做到这一点。我不想创建第三个ArrayList,因为L2是视图层中正在使用的List,所以我不想乱搞。据我所知,也没有这样的实用程序方法。java.util.ArrayListjava.util.ArrayListjava.util.Collectionsorg.apache.commons.collections.CollectionUtils

如何最好使用现有API有效地将ArrayList附加到另一个ArrayList?对于Java 7环境。

PS:addAll追加,我想先。

Sla*_*law 10

用途List#addAll(int,Collection)

将指定集合中的所有元素插入此列表中的指定位置(可选操作)。将当前位于该位置的元素(如果有)和任何后续元素右移(增加其索引)。新元素将按照指定集合的​​迭代器返回的顺序显示在此列表中。如果在操作进行过程中修改了指定的集合,则此操作的行为是不确定的。(请注意,如果指定的集合是此列表,并且是非空的,则将发生这种情况。)

如果您将其0用作索引,则会将给定添加Collection到之前List。例如:

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();

        list1.add("Item #1");
        list1.add("Item #2");

        list2.add("Item #3");
        list2.add("Item #4");

        System.out.println("List #1: " + list1);
        System.out.println("List #2: " + list2);

        list2.addAll(0, list1);

        System.out.println("Combined List: " + list2);

    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();

        list1.add("Item #1");
        list1.add("Item #2");

        list2.add("Item #3");
        list2.add("Item #4");

        System.out.println("List #1: " + list1);
        System.out.println("List #2: " + list2);

        list2.addAll(0, list1);

        System.out.println("Combined List: " + list2);

    }
}
Run Code Online (Sandbox Code Playgroud)


Ama*_*dan 7

subList给您一个列表视图。如果您在列表的最开始处进行查看,addAll将做正确的事。

ArrayList<String> list = new ArrayList<String>(Arrays.asList("extant1", "extant2"));
ArrayList<String> prefix = new ArrayList<String>(Arrays.asList("prefix1", "prefix2"));

list.subList(0, 0).addAll(prefix);
list
// => list ==> [prefix1, prefix2, extant1, extant2]
Run Code Online (Sandbox Code Playgroud)

  • 这很聪明,但是为什么不只使用`0`作为索引的List#addAll(int,Collection)`呢?[它似乎可以满足OP的要求。](/sf/answers/4093588621/) (2认同)