76

我有一个示例程序,如图所示。

我希望我ArrayList symbolsPresent用一些预定义的符号进行初始化:一、二、三和四。

symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");

import java.util.ArrayList;

public class Test {

    private ArrayList<String> symbolsPresent = new ArrayList<String>();

    public ArrayList<String> getSymbolsPresent() {
        return symbolsPresent;
    }

    public void setSymbolsPresent(ArrayList<String> symbolsPresent) {
        this.symbolsPresent = symbolsPresent;
    }

    public static void main(String args[]) {    
        Test t = new Test();
        System.out.println("Symbols Present is" + t.symbolsPresent);

    }    
}

那可能吗?

4

13 回答 13

161

尝试这个

new String[] {"One","Two","Three","Four"};

或者

List<String> places = Arrays.asList("One", "Two", "Three");

数组

于 2013-04-24T14:43:02.057 回答
56

双括号初始化是一个选项:

List<String> symbolsPresent = new ArrayList<String>() {{
   add("ONE");
   add("TWO");
   add("THREE");
   add("FOUR");
}};

请注意,如JLS §15.9所示,在分配的表达式中String泛型类型参数是必需的

如果类实例创建表达式使用类的类型参数的“<>”形式声明匿名类,则这是一个编译时错误。

于 2013-04-24T14:48:38.943 回答
20

如何使用重载的 ArrayList 构造函数

 private ArrayList<String> symbolsPresent = new ArrayList<String>(Arrays.asList(new String[] {"One","Two","Three","Four"}));
于 2013-04-24T14:42:02.933 回答
13

您还可以使用 varargs 语法来使您的代码更简洁:

使用重载的构造函数:

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c"));

utils 模块中的子类 ArrayList:

public class MyArrayList<T> extends ArrayList<T> {
    public MyArrayList(T... values) {
        super(Arrays.asList(values));
    }
}

ArrayList<String> list = new MyArrayList<String>("a", "b", "c");

或者有一个静态工厂方法(我的首选方法):

public class Utils {
  public static <T> ArrayList<T> asArrayList(T... values) {
    return new ArrayList<T>(Arrays.asList(values));
  }
}

ArrayList<String> list = Utils.asArrayList("a", "b", "c");
于 2013-04-24T14:58:06.180 回答
10
import com.google.common.collect.Lists;

...


ArrayList<String> getSymbolsPresent = Lists.newArrayList("item 1", "item 2");

...
于 2015-09-10T06:03:31.377 回答
8

您可以使用Java 8 Stream API
您可以创建对象流并将它们收集为列表。

private List<String> symbolsPresent = Stream.of("ONE", "TWO", "THREE", "FOUR")
    .collect(Collectors.toList());
于 2015-11-15T11:40:23.847 回答
7
public static final List<String> permissions = new ArrayList<String>() {{
    add("public_profile");
    add("email");
    add("user_birthday");
    add("user_about_me");
    add("user_location");
    add("user_likes");
    add("user_posts");
}};
于 2016-11-24T22:47:22.190 回答
4

List.ofJava 9 允许您使用工厂用一行代码创建一个不可修改的列表:

public class Main {
    public static void main(String[] args) {
        List<String> examples = List.of("one", "two", "three");
        System.out.println(examples);
    }
}

输出:

[one, two, three]
于 2018-04-29T23:33:15.537 回答
3

Personnaly 我喜欢在构造函数中进行所有初始化

public Test()
{
  symbolsPresent = new ArrayList<String>();
  symbolsPresent.add("ONE");
  symbolsPresent.add("TWO");
  symbolsPresent.add("THREE");
  symbolsPresent.add("FOUR");
}

编辑:这当然是一种选择,其他人更喜欢在声明中进行初始化。两者都是有效的,我选择了构造函数,因为那里可以进行所有类型的初始化(如果您需要循环或参数,...)。但是,我在源代码顶部的声明中初始化了常量。
最重要的是遵循您喜欢的规则,并在我们的课程中保持一致。

于 2013-04-24T14:45:11.640 回答
2

此外,如果您想强制 List 为只读(如果修改,则抛出 UnsupportedOperationException):

List<String> places = Collections.unmodifiableList(Arrays.asList("One", "Two", "Three"));

于 2013-04-24T14:52:20.717 回答
2

我建议使用 Arrays.asList() 进行单行初始化。对于声明和初始化列表的不同方式,您还可以参考Java 中 ArrayList 的初始化

于 2014-12-07T05:13:01.393 回答
1

我使用从 ArrayList 继承的泛型类,并使用带有可变编号或参数的参数实现构造函数:

public class MyArrayList<T> extends ArrayList<T> {
    public MyArrayList(T...items){
        for (T item : items) {
            this.add(item);
        }
    }
}

例子:

MyArrayList<String>myArrayList=new MyArrayList<String>("s1","s2","s2");
于 2015-06-09T14:43:48.807 回答
0

如果您只想在任何方法之外进行初始化,请使用初始化程序块:

import java.util.ArrayList;

public class Test {
private ArrayList<String> symbolsPresent = new ArrayList<String>();

// All you need is this block.
{
symbolsPresent = new ArrayList<String>();
symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");
}


public ArrayList<String> getSymbolsPresent() {
    return symbolsPresent;
}

public void setSymbolsPresent(ArrayList<String> symbolsPresent) {
    this.symbolsPresent = symbolsPresent;
}

public static void main(String args[]) {    
    Test t = new Test();
    System.out.println("Symbols Present is" + t.symbolsPresent);

}    
}
于 2015-12-28T10:37:16.257 回答