簡體   English   中英

如何判斷隊列大小是否大於max int?

[英]How to tell if Queue size is greater than max int?

有沒有辦法獲得大小超過max int的java.util.Queue的大小而不必圍繞它構建一個包裝器? 任何其他圖書館可能是?

從技術上講,我認為你不能,至少在沒有修改隊列的情況下。

size從集合繼承的方法將返回MAXINT如果有比這更多的元素,但它也將返回,如果恰好有很多元素。

因此,除了提取元素並查看大小是否發生變化之外,沒有別的辦法。

如果它真的很重要,這並不能阻止你創建自己的隊列( long )。

然而,在我漫長的職業生涯中,我看到很少有這樣的情況,排隊變得如此之大 - 你可能想重新思考你正在做什么,他們可能是一個更好的方式。

理論上是的。 您可以使用討厭的反射來破壞抽象並在隊列的實現數據結構中挖掘。 但這是一個非常糟糕的主意。

如果你確實需要那么大的隊列,那么你幾乎肯定需要一個自定義隊列類1 此時,您可以輕松地在API中包含自定義getter以檢索64位隊列大小。


1 - 由簡單數組支持的隊列將無法支持更多的2 ^ 31 - 1個元素,並且具有該數量元素的鏈接隊列將浪費許多GB的內存...更不用說導致重大消化不良的GC。

我認為這應該有效

    long size = 0;
    for(Iterator i = queue.iterator(); i.hasNext(); i.next()) {
        size++;
    }
    return size > Integer.MAX_VALUE;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM