【问题标题】:Java List<string> not adding to list after Arrays.asList() has been used使用 Arrays.asList() 后,Java List<string> 未添加到列表中
【发布时间】:2016-02-29 08:51:36
【问题描述】:

我正在尝试在 Java 中执行以下操作:

String pageName = "MyPage";
String pageSpace= "SpaceA.SpaceB";
List<String> spaceList = new ArrayList<String>();
String[] spaceArr = pageSpace.split("\\.");
spaceList = Arrays.asList(spaceArr);
spaceList.add(pageName);

为什么我无法将字符串添加到列表中? 我可以执行 spaceList.get(0) 和 spaceList.get(1) 来返回“SpaceA”和“SpaceB”,但 spaceList.get(2) 失败应该返回“MyPage”。

【问题讨论】:

    标签: java arrays string list


    【解决方案1】:

    Arrays.asList 返回一个固定大小的列表,该列表由传递给它的数组支持。您不能在该列表中添加/删除元素。

    你甚至不应该能够访问spaceList.get(2) 语句,因为spaceList.add(pageName) 应该首先抛出UnsupportedOperationException(也许你发现了那个异常)。

    要克服这个问题,请创建一个新的ArrayList

    spaceList = new ArrayList<String>(Arrays.asList(spaceArr));
    

    【讨论】:

      【解决方案2】:

      要添加更多内容,Arrays.asList 会返回 AbstractList 中的 instance,而 add 方法中没有 implementation,因此您将从 AbstractList 收到 UnsupportedOperationException

      【讨论】:

        【解决方案3】:

        Arrays.asList 不会给你java.util.ArrayList 的实例,而是给你自己的 AbstractList 实现的对象,它是 Arrays 类中的静态内部类:

        private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, Serializable { }
        

        虽然可以对返回的List进行排序、迭代,但不支持添加/删除类操作。

        您可能正在寻找此处讨论的内容:Converting String array to java.util.List

        【讨论】:

          猜你喜欢
          • 2012-03-23
          • 1970-01-01
          • 1970-01-01
          • 2012-12-26
          • 1970-01-01
          • 2011-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多