在Java中构建一个字符串ArrayList,像在Javascript中一样简单

8

JavaScript 中,我可以构建一个由字符串值组成的数组,例如:

var stuff = new Array('foo','bar','baz','boz','gaz','goz');

甚至更简单
var stuff = 'foo,bar,baz,boz,gaz,goz'.split(',');

在Java中,似乎过于冗长和复杂...有比这更简单的方法吗?
ArrayList<String> stuff = new ArrayList<String>();
stuff.add("foo");
stuff.add("bar");
stuff.add("baz");
stuff.add("boz");
stuff.add("gaz");
stuff.add("goz");

在我的实际情况中,我有30-40个项目要放入ArrayList中...我想肯定有更简单的方法!我忽略了什么明显的东西吗?

4
不要忘记 var stuff = ['foo','bar','baz','boz','gaz','goz']; - Gabe
如果你对Java 7感到好奇,可以在这里阅读更多关于集合字面量的信息:http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/001193.html - Jeremy
5个回答

14
<最初的回答> 这两行代码都可以用来创建一个包含字符串元素的List。第一行使用Arrays.asList方法和一个字符串数组来创建List,第二行使用split方法将一个逗号分隔的字符串转换成字符串数组,并使用Arrays.asList方法来创建List。

6
Arrays.asList接受可变参数,可以这样调用:List<String> strings = Arrays.asList("foo", "bar", "baz")。更好的做法是使用静态导入(import static) Arrays.asList,这样就更简单了:List<String> strings = asList("foo", "bar", "baz") - Abhinav Sarkar
1
@abhin4v:我使用的就是最后一个;它可以非常有效地减少噪音,并且它还在基本库中。 - Donal Fellows
对于一个实际的 java.util.ArrayList,你需要将它包装在 new java.util.ArrayList<String>(...) 中。 - Tom Hawtin - tackline
Tom说的是,asList返回的是一个Arrays.ArrayList,它是一个不可变的数组包装器。 - Andrei Fierbinteanu
实际上它并不是完全不可变的,你不能添加或删除其中的元素,但你可以改变这些元素(就像在普通数组中一样)。 - Andrei Fierbinteanu

1

如果你在编译时将30-40个项目塞入列表中,那可能是更大问题的症状。这很大程度上取决于你正在实现什么。如果你真的想要,你仍然可以使用split,然后只需对列表进行批量插入。


1

Arrays.asList()是获取List实现的好方法,尽管它在技术上不是ArrayList实现,而是一种内部类型。

如果您真的需要它成为ArrayList,您可以编写一个快速的实用程序方法:

public static List<String> create(String... items) {
    List<String> list = new ArrayList<String>(items.length);
    for (String item : items) {
        list.add(item);
    }

    return list;
}

我应该补充说明,splix有一个很好的解决方案,你可能不关心实际的实现,但你必须将变量声明从'ArrayList<String> stuff'更改为'List<String> stuff'。 - Jeff

0

请注意,我自己也在学习Java的集合框架,但以下代码可以编译并运行:

import java.util.*;
class ArrayListStrings {
    public static void main(String[] args) {
        String[] stuffArray = {"foo","bar","baz","boz","gaz","goz"};
        ArrayList<String> stuff = new ArrayList<String>();
        stuff.addAll(Arrays.asList(stuffArray));
        for (int i = 0; i < stuff.toArray().length; i++)
            System.out.println(stuff.toArray()[i]);   
    }
}

输出为:

foo
bar
baz
boz
gaz
goz


0

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