gpt4 book ai didi

java - 为什么 trimToSize/ensureCapacity 方法提供 'public' 级别的访问权限?

转载 作者:行者123 更新时间:2023-11-29 10:11:40 26 4
gpt4 key购买 nike

任何想要访问 java.util.ArrayList 工具的用户都必须遵守 java.util.List 中提供的使用契约(Contract)。

但是可以轻松打破这种使用契约并访问方法 trimToSize

public void trimToSize() { ... }

ensureCapacity

public void ensureCapacity(int minCapacity) { ...}

因为这两个方法既不是从 java.util.AbstractList 覆盖的,也不是从 java.util.List 实现的。

那么,为什么这两个方法提供 public 级别的访问并打破 java.util.List 提供的抽象?

最佳答案

在某些情况下,效率的成本可能高于数据抽象。当您要添加已知数量的元素时,ensureCapacity 可用于预分配一次内部缓冲区。当您不打算添加更多元素以释放浪费的内存时,可以使用 trimToSize。这两种方法都不适用于其他 List 实现,因此它们仅被添加到 ArrayList

请注意,通常列表是由一种方法创建和初始填充的,该方法知道使用的是什么实现。所以这不会破坏抽象。例如,考虑这样的代码:

public List<String> createList() {
ArrayList<String> list = new ArrayList<>();
// populate the list
list.trimToSize();
return list;
}

这样你可以节省内存并仍然返回 List 接口(interface)。

关于java - 为什么 trimToSize/ensureCapacity 方法提供 'public' 级别的访问权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31780053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com