如何将字符串数组的元素添加到字符串数组列表中?

72

我试图将一个字符串数组作为 Wetland 类的构造函数参数传递; 但我不明白如何将字符串数组的元素添加到字符串数组列表中。

import java.util.ArrayList;

public class Wetland {
    private String name;
    private ArrayList<String> species;
    public Wetland(String name, String[] speciesArr) {
        this.name = name;
        for (int i = 0; i < speciesArr.length; i++) {
            species.add(speciesArr[i]);
        }
    }
}
10个回答

118
您已经有内置的方法来实现此功能:-
List<String> species = Arrays.asList(speciesArr);

注意: - 您应该使用List<String> species而不是ArrayList<String> species

Arrays.asList返回一个不同的ArrayList -> java.util.Arrays.ArrayList,它无法转换为java.util.ArrayList

然后您将不得不使用addAll方法,这并不是很好。所以只需使用List<String>

注意: - Arrays.asList返回的列表是固定大小的列表。如果您想向列表中添加内容,则需要创建另一个列表,并使用addAll将元素添加到其中。因此,您最好选择以下第二种方式: -

    String[] arr = new String[1];
    arr[0] = "rohit";
    List<String> newList = Arrays.asList(arr);

    // Will throw `UnsupportedOperationException
    // newList.add("jain"); // Can't do this.

    ArrayList<String> updatableList = new ArrayList<String>();

    updatableList.addAll(newList); 

    updatableList.add("jain"); // OK this is fine. 

    System.out.println(newList);       // Prints [rohit]
    System.out.println(updatableList); //Prints [rohit, jain]

2
@rorrohprog.. 它不会返回 Object,而是返回一个 List<T>,其中 T 是您传递的数组类型。请参见 http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList(T...) - Rohit Jain
1
@rorrohprog。我认为你应该尝试这段代码,并查看我提供的链接中的文档。 - Rohit Jain
11
需要注意的是,Collections.addAll() 是首选方法: 这个便利方法的行为与 c.addAll(Arrays.asList(elements)) 相同,但在大多数实现中,这个方法可能会运行得更快。(Javadoc) - berezovskyi
假设我们的新字符串数组是 arry2,我们想要将其添加到的字符串列表是 list1。那么我们可以像这样将数组(arry2)添加到字符串列表(list1)中:list1.addAll(Arrays.asList(arry2)); - naseer mohammad
这一行应该修改为 List species = Arrays.asList(speciesArr); - webjockey
显示剩余5条评论

18

我更喜欢这个选项,

List<String> temp = Arrays.asList(speciesArr);
species.addAll(temp);
Arrays.asList()方法将创建一个固定大小的列表。因此,如果您直接将其存储到species中,则您将无法添加任何其他元素,但它仍不是只读的。您可以编辑您的项目。因此,请将其放入临时列表中。
另一种选择是,
Collections.addAll(species, speciesArr);
在这种情况下,您可以添加、编辑和删除自己的项目。

12

想着我会把这个加进来:

Collections.addAll(result, preprocessor.preprocess(lines));

这是Intelli建议的更改。

来自javadocs:

Adds all of the specified elements to the specified collection.
Elements to be added may be specified individually or as an array.
The behavior of this convenience method is identical to that of
<tt>c.addAll(Arrays.asList(elements))</tt>, but this method is likely
to run significantly faster under most implementations.
 
When elements are specified individually, this method provides a
convenient way to add a few elements to an existing collection:
<pre>
Collections.addAll(flavors, "Peaches 'n Plutonium", "Rocky Racoon");
</pre>


6

Arrays.asList是数组和集合框架之间的桥梁,它返回一个由数组支持的固定大小的列表。

species = Arrays.asList(speciesArr);

1
Arrays.asList 返回一个对象! - Herupkhart
1
@rorrohprog 如果你阅读文档 http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList%28T...%29 它说它返回 List<T> - luketorjussen
@rorrohprog,为什么它不能编译?我已经让它编译了。唯一的原因是你可能使用了错误的“Arrays”或“List”类。 - luketorjussen

6

在尝试添加项之前,您应该先实例化您的ArrayList

private List<String> species = new ArrayList<String>();

这并不是问题所要求的。 - luketorjussen

3

在Java 8中,此语法大大简化,可以用来简洁地完成此转换。

请注意,为使其正常工作,您需要将字段从具体实现更改为List接口。

public class Wetland {
    private String name;
    private List<String> species;
    public Wetland(String name, String[] speciesArr) {
        this.name = name;
        species = Arrays.stream(speciesArr)
                        .collect(Collectors.toList());
    }
}

3

Arrays.asList()方法只是简单地返回List类型。

char [] arr = { 'c','a','t'};    
ArrayList<Character> chars = new ArrayList<Character>();

要将数组添加到列表中,首先将其转换为列表,然后调用addAll

List arrList = Arrays.asList(arr);
chars.addAll(arrList);

以下代码将导致编译错误。
chars.addAll(Arrays.asList(arr));

2
ArrayList<String> arraylist= new ArrayList<String>();

arraylist.addAll( Arrays.asList("mp3 radio", "presvlake", "dizalica", "sijelice", "brisaci farova", "neonke", "ratkape", "kuka", "trokut")); 

1

Arrays.asList 是 Java 中可用的便捷函数,用于将数组变量转换为列表或集合。为了更好地理解,请考虑以下示例:

package com.stackoverflow.works;

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

public class Wetland {
    private String name;
    private List<String> species = new ArrayList<String>();

    public Wetland(String name, String[] speciesArr) {
        this.name = name;
        this.species = Arrays.asList(speciesArr);
    }

    public void display() {
        System.out.println("Name: " + name);
        System.out.println("Elements in the List");
        System.out.println("********************");
        for (String string : species) {
            System.out.println(string);
        }
    }

    /*
     * @Description: Method to test your code
     */
    public static void main(String[] args) {
        String name = "Colors";
        String speciesArr[] = new String [] {"red", "blue", "green"};
        Wetland wetland = new Wetland(name, speciesArr);
        wetland.display();
    }

}

输出:

enter image description here


-3
public class duplicateArrayList {


    ArrayList al = new ArrayList();
    public duplicateArrayList(Object[] obj) {

        for (int i = 0; i < obj.length; i++) {

            al.add(obj[i]);
        }

        Iterator iter = al.iterator();
        while(iter.hasNext()){

            System.out.print(" "+iter.next());
        }
    }

    public static void main(String[] args) {


    String[] str = {"A","B","C","D"};

    duplicateArrayList dd = new duplicateArrayList(str);

    }

}

什么是原始类型,为什么我们不应该使用它? - luk2302

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接