如果实际大小大于Integer.MAX_VALUE,如何找出java.util.List的大小?

时间:2014-04-08 08:39:42

标签: java list size

据我所知,java.util.List没有尺寸限制。据我了解,size()方法:

  

返回此列表中的元素数。如果此列表包含   超过Integer.MAX_VALUE元素,返回Integer.MAX_VALUE。

因此我有以下问题:

如果我的List的尺寸大于Integer.MAX_VALUE,是否有办法确定确切尺寸?

3 个答案:

答案 0 :(得分:2)

您需要使用更大的数据类型自己计算。

long realSize;

if (myList.size() < Integer.MAX_VALUE) {
    realSize = myList.size();
} else {
    realSize = Integer.MAX_VALUE;
    ListIterator<Foo> iter = myList.listIterator(Integer.MAX_VALUE);
    while (iter.hasNext()) {
      realSize++;
      iter.next();
    }
 }

答案 1 :(得分:0)

如果列表支持的大小很大,它几乎肯定会支持某种替代size方法,您可以使用它来获取大小的长度。例如,我发现的第一个此类实现HugeCollections具有longSize方法。没有这种方法试图获得真实尺寸的开销是荒谬的。

我认为任何标准库List实现都不支持那么庞大的大小; ArrayList和LinkedList没有。如果您需要处理此类问题,您正在使用的巨型列表类型的文档应该告诉您该怎么做。

答案 2 :(得分:0)

这取决于您使用的List的具体实施方式。例如,ArrayList在内部使用java数组,其最大大小为Integer.MAX_VALUE - 5List的其他实现可能具有不同的最大大小。