当前位置: 首页 > 知识库问答 >
问题:

使ArrayList不可更改[重复]

梁修贤
2023-03-14

我想要一个Java中不可更改的ArrayList。所以你不能删除或添加任何元素。所以所有的工作都是由构造器完成的。

到目前为止,我已经试着用下面的方法使列表最终确定

<代码>公共静态最终列表

这不起作用,因为您仍然可以在其中添加元素。

接下来,我在网上搜索并发现您可以像这样覆盖所有方法:

public NoChangeArrayList<T> extends ArrayList<T> {
    @Override
    public boolean remove() {
        //do nothing...
    }
    //override all change methods
    (...)
}

这对我来说似乎不是一个好的解决方案,因为我需要为这么简单的事情投入大量的工作。

有没有一种简单的方法可以制作一个不变的ArrayList?

共有1个答案

严峰
2023-03-14

有一个名为Guava的库可以为您完成所有这些,我几乎将其用于每个项目,因为不幸的是Java直到Java8之后才支持真正不可变的集合

List<Integer> mutable = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

List<Integer> immutable = ImmutableList.copyOf(mutable);
 类似资料:
  • 我在~/.bashrc和/etc/environment中更改了JAVA_HOME,并提供了它的源代码。这导致JAVA_HOME发生更改。 然而,我的java版本仍然保持显示早期版本。 最后,运行下面的代码为我提供了符号链接,它将我指向系统正在使用的实际java可执行文件。我把它编辑到我下载的Java8中,现在我的java版本显示了正确的版本。 我的问题是: 如果这是唯一导致更改的编辑,那么我们为

  • 指的是邮报的标题。,我正在尝试从内部更新ArrayList的值,但这不起作用 请参阅以下模型以进一步了解: 我有一个POJO类如下: 在我的管理器中,我创建了用户POJO列表: 现在在我的Facelet中,我使用将数据加载到中的to表中,以便用户可以编辑和更改值。Facelet代码: 当我编辑时,上述方法工作正常,但它不适用于。 我可以假设它适用于,因为有setter和getter方法。 那么我如

  • 我需要一个选择 我需要在选择器上显示'shortName'字段,但需要使用id值。这就是我所拥有的: 它正确显示短名称,但选项值为0、1、2。如何使用数组上的id值修改它们?

  • 问题内容: 嘿,我注意到在浏览GitHub存储库时,它使用AJAX加载每个文件夹/文件。 我了解所有这些,我只是想知道他们如何更改URL。您可以使用JavaScript获取并设置URL吗?如果是这样,对于将基于JavaScript的网站的一部分添加为书签可能非常有用。(其中的几页,通过JavaScript在其中移动) 谢谢。 问题答案: 它在历史记录操作API中使用了新的push/ pop状态功能

  • 这里将记录重大更改,并在可能的情况下向JS代码添加弃用警告,在这更改之前至少会有一个重要版本. Breaking Changes Breaking changes will be documented here, and deprecation warnings added to JS code where possible, at least one major version before t

  • 这里将记录重大更改,并在可能的情况下向JS代码添加弃用警告,在这更改之前至少会有一个重要版本. 重大更改的类型 本文档使用以下约定对重大更改进行分类: API 更改:已更改的 API 会以某种方式使未更新的代码必定抛出异常。 行为改变:Electron 的行为已经改变,但并不一定抛出相应的异常。 默认值更改:依赖于默认值的代码的行为可能被破坏,但不保证会抛出相应的异常。 您可以通过显式指定该值的方