如何判断队列大小是否大于最大整数?

问题描述:

有没有办法获得大小超过max int的java.util.Queue的大小,而无需构建一个包装呢?任何其他图书馆可能是?如何判断队列大小是否大于最大整数?

+0

你的意思'java.util.Queue'? – 2014-11-22 02:12:07

+0

是........... – mindreader 2014-11-22 02:17:23

我认为这应该工作

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

从技术上讲,我不认为你可以,至少不需要修改队列。

从集合继承的size方法将返回maxint,如果有更多的元素比它,但它也会返回,如果有正好那许多元素。

因此,除了提取元素并查看大小是否发生变化之外,没有其他办法。

这并不能阻止你创建自己的队列(使用long大小),如果它真的很重要。

但是,在我漫长的职业生涯中,我发现很少有这样的情况 - 队员们可能想要重新考虑你在做什么,他们可能是更好的选择。

+0

嗯..我认为这对我来说应该足够好。 你碰巧知道任何其他类型的集合吗? – mindreader 2014-11-22 02:21:37

+0

我在单元测试中使用它来检查收集的数据量。如果它返回的最大尺寸大于此值,我认为这应该解决我的目的。谢谢。 – mindreader 2014-11-22 02:28:51

理论上是。您可以使用讨厌的反射来破坏抽象并在队列的实现数据结构中进行挖掘。但这是一个非常糟糕的主意。

如果你真的需要这样大小的队列,那么你几乎肯定需要一个自定义队列类。此时,您可以轻松地在您的API中包含自定义获取器来检索64位队列大小。


1 - 通过简单的数组支持的队列将不能够支持更多的是2^31 - 1层的元件,并且一个链接的队列与该数目的元件是要浪费的存储器许多千兆字节......更不用说引起GC的重大消化不良了。

+0

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