java - 如何从 Java 中的 CopyOnWriteArrayList 中获取底层静态数组?

标签 java arrays copy-on-write

我有一个类维护类的功能列表。与读取相比,这些特征很少改变。读取几乎总是通过特征列表进行迭代。因此,我使用了 CopyOnWriteArrayList

我想要一个这样的函数:

function Feature[] getFeatures() {
  .. implementation goes here ..
}

我承认,原因可能是有点懒。我想写这样的代码:

for (Feature f: object.getFeatures()) {
  .. do something interesting ..
}

而不是这个:

Iterator<Feature> iter = object.getFeatureIterator();
while (iter.hasNext()) {
  Feature f = iter.next();
  .. do something interesting ..
}

主要问题是——我是不是懒惰了?我将大量遵循这种模式,而且我认为第一段代码更容易维护。显然,我永远不会更改底层数组,我会把它放在文档中。

处理这种情况的正确方法是什么?

最佳答案

只需在列表上调用 toArray 方法即可:

public Feature[] getFeatures() {
    return this.featureList.toArray(new Feature[this.featureList.size()]);
}

请注意,foreach 语法可用于所有 Iterable 对象,而 List 是 Iterable,因此您可以只使用

public List<Feature> getFeatures() {
    return this.features;
}

并使用相同的 foreach 循环。如果您不希望调用者修改内部列表,请返回一个不可修改的 ListView :

public List<Feature> getFeatures() {
    return Collections.unmodifiableList(this.features);
}

关于java - 如何从 Java 中的 CopyOnWriteArrayList 中获取底层静态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8190519/

相关文章:

java - 从数据库检索数据以使用 room 显示用户个人资料信息

rust - 如何将 SmallVec 与 Cow 一起使用

.net - 调用 ToString 后,StringBuilder 是否变得不可变?

php - PHP 中的数组到对象和对象到数组 - 有趣的行为

c++ - Windows 上的写时复制文件映射

java - 我们可以从我们的项目中创建另一个javafx项目吗?

java - 将对象从 C++ 返回到 Java

java - 无法从java中的另一个类调用方法

c - 查找数组中不同元素数量的最快方法

java - Java 数组中的对象