2014-11-22 67 views

回答

1

我認爲這應該工作

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

從技術上講,我不認爲你可以,至少不需要修改隊列。

從集合繼承的size方法將返回maxint,如果有更多的元素比它,但它也會返回,如果有正好那許多元素。

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

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

但是,在我漫長的職業生涯中,我發現很少有這樣的情況 - 隊員們可能想要重新考慮你在做什麼,他們可能是更好的選擇。

+0

嗯..我認爲這對我來說應該足夠好。 你碰巧知道任何其他類型的集合嗎? – mindreader 2014-11-22 02:21:37

+0

我在單元測試中使用它來檢查收集的數據量。如果它返回的最大尺寸大於此值,我認爲這應該解決我的目的。謝謝。 – mindreader 2014-11-22 02:28:51

1

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

如果你真的需要這樣大小的隊列,那麼你幾乎肯定需要一個自定義隊列類。此時,您可以輕鬆地在您的API中包含自定義獲取器來檢索64位隊列大小。


1 - 通過簡單的數組支持的隊列將不能夠支持更多的是2^31 - 1層的元件,並且一個鏈接的隊列與該數目的元件是要浪費的存儲器許多千兆字節......更不用說引起GC的重大消化不良了。

+0

這很有道理..謝謝! – mindreader 2014-11-22 02:26:32

相關問題