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

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

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


}
}

这可能吗?

253670 次浏览

< strong > 重载的 ArrayList 构造函数 怎么样。

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

试试这个

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

或者

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

数组

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

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

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

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

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

请注意,如 JLS 15.9所示,指定的表达式中需要 String泛型类型参数

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

另外,如果希望强制 List 为只读(如果修改,则抛出一个 Unsupport tedOperationException) :

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

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

我建议使用 Arrays.asList ()进行单行初始化。对于声明和初始化 List 的不同方式,您也可以引用 在 Java 中初始化 ArrayList

我使用一个从 ArrayList 继承的泛型类,并实现一个带有变量 number 或参数的参数的构造函数:

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");
import com.google.common.collect.Lists;


...




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


...

你可以使用 Rel = “ noReferrer”> Java 8 Stream API
您可以创建一个对象流并以 List 的形式收集它们。

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

如果只想在任何方法之外进行初始化,那么使用初始化器块:

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


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

Java9允许您使用 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]