有没有办法获得大小超过max int的java.util.Queue的大小而不必围绕它构建一个包装器?任何其他图书馆可能是?
答案 0 :(得分:1)
从技术上讲,我认为你不能,至少没有修改队列。
如果有更多的元素,那么从集合继承的size
方法将返回maxint,但如果完全那么多元素,它也会返回。
因此,除了提取元素并查看大小是否发生变化之外,别无他法。
这并不会阻止您创建自己的队列(大小为long
),如果它真的很重要的话。
然而,在我漫长的职业生涯中,我看到很少有这样的情况,那就是队列变得如此之大 - 你可能想要重新思考你正在做的事情,他们可能是更好的方式。
答案 1 :(得分:1)
理论上是的。您可以使用讨厌的反射来破坏抽象并在队列的实现数据结构中挖掘。但这是一个非常糟糕的主意。
如果你确实需要那么大的队列,那么你几乎肯定需要一个自定义队列类 1 。此时,您可以在API中轻松添加自定义getter以检索64位队列大小。
1 - 由简单数组支持的队列将无法支持更多2 ^ 31 - 1个元素,并且具有该数量元素的链接队列将浪费许多千兆字节的内存。更不用说引起GC的严重消化不良了。
答案 2 :(得分:1)
我认为这应该有用
long size = 0;
for(Iterator i = queue.iterator(); i.hasNext(); i.next()) {
size++;
}
return size > Integer.MAX_VALUE;