Java列表:实例化时和实例化后之间的区别

时间:2019-03-17 13:39:56

标签: java list arraylist instantiation difference

仅当在实例化后将值分配给arrayList时,才会发生此错误。 This is the Error

这仅在代码如下时发生:

String line = scanner.nextLine();
line = line.replaceAll("[^A-Za-z]", " ");
line = line.toLowerCase();
List<String> words = new ArrayList<String>();
words = Arrays.asList(line.split(" "));
words.removeAll(Arrays.asList("", null));
System.out.println(Arrays.toString(words.toArray()));

当代码如下时,程序运行正常:

String line = scanner.nextLine();
line = line.replaceAll("[^A-Za-z]", " ");
line = line.toLowerCase();
List<String> words = new ArrayList<String>(Arrays.asList(line.split(" ")));
words.removeAll(Arrays.asList("", null));
System.out.println(Arrays.toString(words.toArray()));

感谢您提供任何进一步的解释和建议:)

2 个答案:

答案 0 :(得分:2)

  

仅当在实例化后将值分配给arrayList时,才会发生此错误。

这不是您在这里所做的:

List<String> words = new ArrayList<String>();
words = Arrays.asList(line.split(" "));

您要为ArrayList分配一个空的words,然后再将List创建的另一个Arrays.asList(line.split(" "))分配给words。第二个List是固定大小的List,因此您不能从其中删除元素。

如果稍后将一个不同的words分配给它,则没有必要将ArrayList初始化为空的List

如果要使用ArrayList初始化了words变量,请对第二条语句使用addAll

List<String> words = new ArrayList<String>();
words.addAll(Arrays.asList(line.split(" ")));

答案 1 :(得分:0)

words = Arrays.asList(line.split(" "));

问题是这行-Arrays.asList()创建一个不可变列表,之后您将无法添加/删除项目