Java 列表:实例化时赋值和实例化后赋值的区别
Java Lists: Difference between assignment while instantiating and after
只有当我在实例化后为 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()));
感谢任何类型的进一步解释和建议:)
This error only occurs when I assign values to an arrayList after it has been Instantiated.
那不是你在这里做的:
List<String> words = new ArrayList<String>();
words = Arrays.asList(line.split(" "));
您正在将空的 ArrayList
分配给 words
,然后将由 Arrays.asList(line.split(" "))
创建的另一个 List
分配给 words
。第二个 List
是固定大小的 List
,因此您不能从中删除元素。
没有必要将 words
初始化为一个空的 ArrayList
,如果稍后您为它分配一个不同的 List
。
如果要使用初始化 words
变量的 ArrayList
,请对第二条语句使用 addAll
:
List<String> words = new ArrayList<String>();
words.addAll(Arrays.asList(line.split(" ")));
words = Arrays.asList(line.split(" "));
问题是这一行 - Arrays.asList() 创建了一个 不可变的 列表,之后你不能添加/删除项目
只有当我在实例化后为 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()));
感谢任何类型的进一步解释和建议:)
This error only occurs when I assign values to an arrayList after it has been Instantiated.
那不是你在这里做的:
List<String> words = new ArrayList<String>();
words = Arrays.asList(line.split(" "));
您正在将空的 ArrayList
分配给 words
,然后将由 Arrays.asList(line.split(" "))
创建的另一个 List
分配给 words
。第二个 List
是固定大小的 List
,因此您不能从中删除元素。
没有必要将 words
初始化为一个空的 ArrayList
,如果稍后您为它分配一个不同的 List
。
如果要使用初始化 words
变量的 ArrayList
,请对第二条语句使用 addAll
:
List<String> words = new ArrayList<String>();
words.addAll(Arrays.asList(line.split(" ")));
words = Arrays.asList(line.split(" "));
问题是这一行 - Arrays.asList() 创建了一个 不可变的 列表,之后你不能添加/删除项目