第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

迭代實現(xiàn) Iterable<Item> 的類中數(shù)組的非空部分

迭代實現(xiàn) Iterable<Item> 的類中數(shù)組的非空部分

繁星淼淼 2023-06-28 15:41:05
我對其他語言有經(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)部使用了弱引用之類的東西,但這不是您的情況)。


查看完整回答
反對 回復(fù) 2023-06-28
  • 1 回答
  • 0 關(guān)注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號