67

我正在尝试将字符串数组作为参数传递给 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]);
        }
    }
}
4

11 回答 11

113

你已经有内置的方法: -

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]
于 2012-10-12T06:41:29.737 回答
17

我比较喜欢这个

List<String> temp = Arrays.asList(speciesArr);
species.addAll(temp);

原因是 Arrays.asList() 方法将创建一个固定大小的列表。因此,如果您直接将其存储到物种中,那么您将无法再添加任何元素,它仍然不是只读的。您当然可以编辑您的项目。所以把它放到临时列表中。

替代方案是,

Collections.addAll(species, speciesArr);

在这种情况下,您可以添加、编辑、删除您的项目。

于 2012-10-12T07:11:30.790 回答
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>

于 2015-07-11T23:27:25.660 回答
7

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

private List<String> species = new ArrayList<String>();
于 2012-10-12T06:53:17.090 回答
6

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

species = Arrays.asList(speciesArr);
于 2012-10-12T06:41:29.630 回答
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());
    }
}
于 2016-04-11T22:52:29.043 回答
2

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));
于 2017-05-15T15:51:07.287 回答
1

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

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();
    }

}

输出:

在此处输入图像描述

于 2012-10-12T07:09:47.937 回答
1
ArrayList<String> arraylist= new ArrayList<String>();

arraylist.addAll( Arrays.asList("mp3 radio", "presvlake", "dizalica", "sijelice", "brisaci farova", "neonke", "ratkape", "kuka", "trokut")); 
于 2014-06-28T20:26:41.577 回答
0

使用asList()方法。来自 java Doc asList

List<String> species = Arrays.asList(speciesArr);
于 2012-10-12T06:44:34.070 回答
-2
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);

    }

}
于 2016-07-19T14:24:03.713 回答