使用某些预定义值初始化ArrayList

时间:2013-04-24 14:40:47

标签: java

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

我希望我的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);

    }    
}

这可能吗?

13 个答案:

答案 0 :(得分:130)

试试这个

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

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

ARRAYS

答案 1 :(得分:52)

双支撑初始化是一个选项:

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

请注意,JLS §15.9

指示的已分配表达式中String泛型类型参数
  

如果类实例创建表达式使用“&lt;&gt;”声明匿名类,则是编译时错误类的类型参数的形式。

答案 2 :(得分:17)

如何使用overloaded ArrayList constructor

 private ArrayList<String> symbolsPresent = new ArrayList<String>(Arrays.asList(new String[] {"One","Two","Three","Four"}));

答案 3 :(得分:11)

您还可以使用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");

答案 4 :(得分:9)

import com.google.common.collect.Lists;

...


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

...

答案 5 :(得分:6)

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

private List<String> symbolsPresent = Stream.of("ONE", "TWO", "THREE", "FOUR")
    .collect(Collectors.toList());

答案 6 :(得分:6)

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

答案 7 :(得分:4)

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

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

输出:

[one, two, three]

答案 8 :(得分:3)

Personnaly我喜欢在构造函数

中进行所有初始化
public Test()
{
  symbolsPresent = new ArrayList<String>();
  symbolsPresent.add("ONE");
  symbolsPresent.add("TWO");
  symbolsPresent.add("THREE");
  symbolsPresent.add("FOUR");
}

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

答案 9 :(得分:2)

另外,如果要强制List为只读(如果修改则抛出UnsupportedOperationException):

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

答案 10 :(得分:2)

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

答案 11 :(得分: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");

答案 12 :(得分: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);

}    
}