【问题标题】:How trimToSize in Arraylist works? [duplicate]Arraylist 中的 trimToSize 如何工作? [复制]
【发布时间】:2016-02-17 07:49:48
【问题描述】:

Javadoc 说“

“将此 ArrayList 实例的容量调整为列表的当前大小”

下面是用来理解函数的Test程序,

ArrayList<Integer> arraylist = new ArrayList<Integer>(50);
    arraylist.add(1);
    arraylist.add(2);
    arraylist.add(3);
    arraylist.add(4);
    arraylist.add(5);
    arraylist.add(6);
    arraylist.add(7);
    arraylist.add(1);
    arraylist.add(1);
    arraylist.add(1);
    System.out.println(arraylist);
    arraylist.trimToSize();
    System.out.println(arraylist);

但是两种情况下的输出都是一样的。

[1, 2, 3, 4, 5, 6, 7, 1, 1, 1]

谁能帮我理解如何使用这种方法来缩小数组列表的大小?

【问题讨论】:

  • 我看到了您发布的链接。但这并不能解决我的问题。我的问题很简单,在 trimTosize 方法之前和之后,arraylist 打印相同的数据。 trimToSize 方法有什么优势?
  • 阅读链接问题中的答案。他们确切地回答了这个问题。
  • ArrayList 由一个数组支持,为了提高效率,该数组可以大于包含在 ListtrimToSize 中的元素数量,修剪后备缓冲区使其大小为与缓冲区中的元素个数相同
  • 它将内部数组修剪到所需的长度?当您删除项目时,数组不会神奇地变小,它会保持原来的大小,并且在添加项目后,列表可能会变成以前大小的 1.5 倍。这会导致许多未使用的数组元素。该方法可以只修剪内部数组以适应项目的实际数量...
  • 所以在我提供的示例中,在调用 trimToSize 方法之前,arraylist 有一个大小为 50 的数组?

标签: java


【解决方案1】:

Use the source,卢克!

/**
 * Trims the capacity of this <tt>ArrayList</tt> instance to be the
 * list's current size.  An application can use this operation to minimize
 * the storage of an <tt>ArrayList</tt> instance.
 */
public void trimToSize() {
    modCount++;
    if (size < elementData.length) {
        elementData = (size == 0)
          ? EMPTY_ELEMENTDATA
          : Arrays.copyOf(elementData, size);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2011-03-28
    • 2019-02-28
    • 2013-12-07
    • 1970-01-01
    • 2017-06-23
    相关资源
    最近更新 更多