Java列表:实例化时和之后的赋值之间的差异
仅当我在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()));
感谢您的进一步解释和建议:)
# 1 楼答案
这不是你在这里要做的:
您正在将一个空的
ArrayList
分配给words
,然后将由Arrays.asList(line.split(" "))
创建的另一个List
分配给words
。第二个List
是一个固定大小的List
,因此不能从中删除元素如果稍后为
words
分配不同的List
,那么将words
初始化为空的ArrayList
是没有意义的如果要使用初始化了
words
变量的ArrayList
,请对第二条语句使用addAll
:# 2 楼答案
问题在于这种线阵列。asList()创建一个不可变的列表,以后不能添加/删除该列表中的项