如何将String[]转换为ArrayList<String>?

144

我需要将一个 String[] 转换为一个 ArrayList<String>,但我不知道如何操作。

可能是重复问题:
在Java中将数组分配给ArrayList

File dir = new File(Environment.getExternalStorageDirectory() + "/dir/");
String[] filesOrig = dir.list();

基本上我想将filesOrig转换为一个ArrayList

1
https://dev59.com/Im865IYBdhLWcg3wkfgW - evanwong
1
讽刺的是,尽管这比原版更有名,但它被标记为重复。 - Gaurav Mall
6个回答

367

你可以按照以下步骤进行:

String [] strings = new String [] {"1", "2" };
List<String> stringList = new ArrayList<String>(Arrays.asList(strings)); //new ArrayList is only needed if you absolutely need an ArrayList

谢谢,这就是我使用的那一个。 - Alexandre Hitchcox
1
我不相信你可以对这个列表进行更改。stringList.remove(1) 对我来说肯定行不通。 - Bob Lissner

41

像这样:

String[] words = {"000", "aaa", "bbb", "ccc", "ddd"};
List<String> wordList = new ArrayList<String>(Arrays.asList(words));
或者
List myList = new ArrayList();
String[] words = {"000", "aaa", "bbb", "ccc", "ddd"};
Collections.addAll(myList, words);

3
谢谢。我不能使用Arrays.asList,因为我之后需要向列表中添加元素。 addAll完美地解决了这个问题 :) - MysticMagicϡ
1
第二个选项可行。 - Someone Somewhere

19
List<String> list = Arrays.asList(array);

返回的列表将由数组支持,它就像一座桥梁,因此它将是固定大小的。


这个答案是错误的,而且甚至不能编译。 - suriv
@suriv:唯一的问题是使用了List而不是ArrayList,但答案并没有错。将数组复制到ArrayList中并不总是必要的,有时你只需要将一个数组视为列表。请注意,创建一个真正的副本,例如new ArrayList<>(Arrays.asList(array)),需要为列表的每个元素分配内存。例如,一个包含100000个Object的数组仅指针引用就需要800kb的RAM。 - Jack
1
为了未来读者的利益,尝试向此列表添加或删除元素将引发异常。 - suriv
1
@suriv:答案中已经明确说明了,文档中也已经明确说明了,在任何情况下感谢您的澄清。 - Jack

9
List myList = new ArrayList();
Collections.addAll(myList, filesOrig); 

7
你可以遍历整个数组并将其添加到ArrayList中:
ArrayList<String> files = new ArrayList<String>(filesOrig.length);
for(String file: filesOrig) {
    files.add(file);
}

或者使用Arrays.asList(T... a)来实现评论中提到的功能。

1
new ArrayList<String>(filesOrig.length); 可以防止支撑数组大小的增长。可能更快。 - zapl

2
您可以尝试以下代码:

MyClass[] arr = myList.toArray(new MyClass[myList.size()]);

该代码将 ArrayList 转换为数组。

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