【发布时间】:2020-01-04 09:58:20
【问题描述】:
我在其他语言方面经验丰富,但对 Java 很陌生。作为针对特定情况的优化,我正在尝试从数组中实现一个可迭代的容器类,因为我知道我的容器一次最多可容纳 4 个项目,并且这些项目每个都属于特定索引,而不是第一个in 获取可用的最低索引。
为了避免在迭代列表时检查 null,我只希望为迭代返回非 null 值...下面的“iterator()”覆盖是否有效?垃圾收集器有没有机会在我迭代它之前清除我返回的可迭代列表?或者有没有更好的方法来实现这一点?
class FixedArray<T> implements Iterable<T> {
FixedArray() {}
public void add(byte index, T item) {
array[index] = item;
}
@Override
public Iterator<T> iterator() {
List<T> listWithoutNull = new ArrayList<>();
for (Item item: array) {
if (item != null) {
listWithoutNull.add(item);
}
}
return listWithoutNull.iterator();
}
private final T[] array = { null, null, null, null };
}
【问题讨论】:
-
在这种情况下,你为什么需要
List- 也许改用Set -
"...据我所知,我的容器一次最多可容纳 4 个项目,并且这些项目每个都属于特定索引,而不是首先获得可用的最低索引。 " - 为什么不创建一个有四个属性的类呢?
-
迭代器方法中的 Set 是否替换了 List
listWithoutNull?又有什么优势呢? -
@Turing85 好问题,因为为了四叉树的位置识别,扁平化的索引是用基本的二维位置编码的
-
@IronAttorney 你认为这比
public class Square { private Point bottomLeft; private Point bottomRight; private Point upperLeft; private Poiint upperRight; }更易读或更容易理解吗?
标签: java arrays iterator subclass implements