我對其他語言有經(jīng)驗,但對 Java 很陌生。作為針對特定情況的優(yōu)化,我嘗試從數(shù)組實現(xiàn)可迭代容器類,因為我知道我的容器一次最多容納 4 個項目,并且這些項目每個都屬于特定索引,而不是第一個索引in 獲取可用的最低索引。為了節(jié)省我在迭代列表時檢查 null 的情況,我只希望返回迭代的非空值...下面的“iterator()”重寫是否有效?在我迭代它之前,垃圾收集器是否有機會清除我返回的可迭代列表?或者有更好的方法來實現(xiàn)這一目標(biāo)嗎?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 };}
1 回答

萬千封印
TA貢獻1891條經(jīng)驗 獲得超3個贊
下面的“iterator()”重寫會起作用嗎?
是的,為什么不?覆蓋iterator()完全沒問題。然而,這不是一個有效的實現(xiàn)。我會寫這樣的東西:
@Override
public Iterator<T> iterator() {
return Arrays.stream(array).filter(Objects::nonNull).iterator();
}
這里,不會創(chuàng)建中間集合,因此沒有開銷。
在我迭代它之前,垃圾收集器是否有機會清除我返回的可迭代列表?
不,當(dāng)您持有對該對象的強引用時,垃圾收集器不允許執(zhí)行此操作Iterator(除非您的Iterator實現(xiàn)在內(nèi)部使用了弱引用之類的東西,但這不是您的情況)。
添加回答
舉報
0/150
提交
取消