【发布时间】:2016-10-18 02:08:54
【问题描述】:
我白天是一名 c++ 开发人员,并且习惯于 const 返回类型的约定。我知道java中没有类似的工具。
我有一个特定的情况,想知道最适合我的任务的不可变集合。在 C++ 中,我只会使用 std::vector。
我有一个 WavFile 类,它当前有一个 float[] 数据,我想用不可变的东西替换它。
关于容器的一些重要规定是它的大小在创建时是已知的,它根本不需要动态增长或收缩。其次,索引到容器中应该是 O(1)。
最重要的是,正如主题所暗示的那样,我希望能够拥有一个返回此容器的不可变版本的 getter。
我要查找的容器类型是什么?这在java中是可能的吗?
【问题讨论】:
-
您需要自己的容器包装
float[]数组。任何基于 Java 泛型的集合在存储量方面都会有太多的开销,在引用的局部性方面甚至会产生更多的开销。编写满足您要求的自己的容器。 Getter 应该为调用者制作一个防御性的数组副本。 -
我认为避免通过设计暴露内部数据的更好方法。如果您的目标只是让人们遍历每个浮点数,而不是公开内部数据,为什么不简单地公开
DoubleStream getDataStream()甚至void forEachDataPoint(DoubleConsumer consumer)?如果您希望人们进行某种随机访问,您还可以公开类似float dataPoint(int index); float[] dataPoints(int from, int to);
标签: java arrays collections