【问题标题】:How could ArrayDeque has unlimited size with an array backupArrayDeque 如何通过数组备份具有无限大小
【发布时间】:2022-11-23 16:11:21
【问题描述】:

我从这里读到这个`Array deques have no capacity restrictions:

https://docs.oracle.com/javase/7/docs/api/java/util/ArrayDeque.html#:~:text=Array%20deques%20have%20no%20capacity,Null%20elements%20are%20prohibited

但是在源码中我发现它使用的是数组(最大容量为Integer.MAX_VALUE),长大后会抛出异常:

if ((minCapacity = oldCapacity + needed) - MAX_ARRAY_SIZE > 0) {
    if (minCapacity < 0)
        throw new IllegalStateException("Sorry, deque too big");
    return Integer.MAX_VALUE;
}

我很困惑,ArrayDeque 真的有无限大小吗?

【问题讨论】:

  • 它有一个理论上无限大小,但实际限制是数组的限制,最多只能有 Integer.MAX_VALUE 个元素。对于大多数应用程序来说,这已经足够了——您是否遇到过任何问题?

标签: java arraydeque


【解决方案1】:

正如 Thomas 在他的评论中已经提到的,实际限制是 Integer.MAX_VALUE,等于 2,147,483,647。因此,ArrayDeque 的 javadoc 只是正确的,考虑到它背后的理论,而不是实现。

我想不出一个场景可以证明将 ArrayDeque 用于其最大容量是合理的。恕我直言,这只是代码设计非常糟糕的症状,应该避免。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2014-04-22
    相关资源
    最近更新 更多