46

我们不能对从 .. 获得的集合执行<Collection>.add或操作,只允许删除操作。 <Collection>.addAllArrays.asList

那么,如果我遇到需要添加新元素List而不删除之前的元素的情况List怎么办?我怎样才能做到这一点?

4

8 回答 8

80

ArrayList使用构造函数创建一个新的:

List<String> list = new ArrayList<String>(Arrays.asList("a", "b"));
于 2013-08-22T19:14:38.467 回答
15

一种方法是构造一个新的ArrayList

List<T> list = new ArrayList<T>(Arrays.asList(...));

完成后,您可以随意修改list

于 2013-08-22T19:14:41.990 回答
4

Arrays.asList(),生成一个实际上由数组支持的列表,它是一个变形为列表的数组。您可以将其用作列表,但不能对其执行某些操作,例如添加新元素。所以最好的选择是将它传递给另一个列表 obj 的构造函数,如下所示:

List<T> list = new ArrayList<T>(Arrays.asList(...));
于 2016-07-07T17:10:45.823 回答
4

ArrayList您可以使用 Java8 流绕过中间体:

    Integer[] array = {1, 2, 3};
    List<Integer> list = Streams.concat(Arrays.stream(array),
                                        Stream.of(4)).collect(Collectors.toList());

这应该非常有效,因为它可以遍历数组并预先分配目标列表。对于大型阵列,它可能会更好,也可能不会更好。与往常一样,如果重要,您必须进行衡量。

于 2017-11-23T15:01:43.627 回答
3

集合的构造函数,例如下面的示例中的 ArrayList,将数组作为列表并使用该列表的元素构造一个新实例。

List<T> list = new ArrayList<T>(Arrays.asList(...));

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#ArrayList(java.util.Collection)

于 2013-08-22T19:20:21.043 回答
1

这些天来,流 API 可以轻松地ArrayList以简洁和实用的方式为您提供:

Stream.of("str1", "str2").collect(Collectors.toList()));

当然,这也具有使用映射进行转换的灵活性。例如,在为 Spring 安全代码编写单元测试时,编写以下代码很方便:

Stream.of("ROLE_1", "ROLE_2").map(SimpleGrantedAuthority::new).collect(Collectors.toList()));

返回的列表Collectors.toList是一个ArrayList并且可以根据您的代码的需要进行修改。

于 2021-04-26T11:30:10.657 回答
0

Arrays.asList()

在对象创建时生成一个不可修改的列表。您可以使用以下代码。

List list = Collections.synchronizedList(new ArrayList(...));

此转换允许列表添加和删除对象。我只在 java 8 中测试过。

于 2020-07-21T16:13:38.857 回答
0
ArrayList<Object> MyObjectList = new ArrayList<>();
Arrays.asList(params[1]).forEach((item)-> {
    MyObjectList.add(item);
});
于 2020-09-08T20:55:28.220 回答