有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

感谢您的进一步解释和建议:)


共 (2) 个答案

  1. # 1 楼答案

    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分配不同的List,那么将words初始化为空的ArrayList是没有意义的

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

    List<String> words = new ArrayList<String>();
    words.addAll(Arrays.asList(line.split(" ")));
    
  2. # 2 楼答案

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

    问题在于这种线阵列。asList()创建一个不可变的列表,以后不能添加/删除该列表中的项