【问题标题】:ArrayList in Java when storing large objectsJava中存储大对象时的ArrayList
【发布时间】:2013-03-01 03:10:01
【问题描述】:

遇到了这个关于Java中arraylist的面试题,觉得挺有意思的,但是不知道怎么回答:

What attention should be paid when using arrayList to store large object?

不知道我们是否应该就时空复杂性来回答这个问题?

谢谢

【问题讨论】:

  • 我认为 ArrayList 只存储对象的引用?!所以这根本不重要。
  • 询问ArrayList 的ensureCapacity() 方法是不是一种迂回的方式?可能意味着大量 对象?
  • 存储大对象不是问题,但是当您存储大量对象时,通过重新分配数组大小,数组列表可能效率低下。

标签: java


【解决方案1】:

ArrayList 支持可以根据需要增长的动态数组。 在 Java 中,数组具有固定长度,这意味着在创建数组之后,它们不能增长或缩小,这意味着您必须事先知道一个数组将包含多少个元素。但是,有时,您可能直到运行时才知道大小,因此在这种情况下我们使用了 ArrayList。 ArrayList 可以动态增加或减少大小。数组列表是使用初始大小创建的。当超过这个大小时,集合会自动放大。移除对象后,数组可能会缩小。 另外,请注意 Arraylist 只存储对象。

【讨论】:

    【解决方案2】:

    ArrayList 内部使用 Object[]。一旦达到最大容量,它会创建一个大小为原始数组 1.5 倍的新数组,并将从旧数组复制到新数组。可能是面试官想检查这个带有大对象的副本的成本

    ArrayList: how does the size increase?

    检查 ensureCapacity() - http://www.docjar.com/html/api/java/util/ArrayList.java.html

    【讨论】:

      【解决方案3】:

      Java 中的所有对象都存储为引用、容器和变量等,因此在 C++ 术语中,所有容器只存储指向对象的指针。在这种情况下,对象的大小对于大多数用例(如果不是所有用例)都应该无关

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-13
        • 1970-01-01
        • 2021-09-12
        • 1970-01-01
        • 2014-02-16
        • 2017-02-10
        • 2013-03-02
        相关资源
        最近更新 更多