ove*_*nge 1 java collections abstraction arraylist
任何想要访问java.util.ArrayList
设施的用户都必须遵守提供的使用合同java.util.List
.
但是人们可以轻松地破坏这个使用合同并访问这些方法 trimToSize
public void trimToSize() { ... }
Run Code Online (Sandbox Code Playgroud)
和 ensureCapacity
public void ensureCapacity(int minCapacity) { ...}
Run Code Online (Sandbox Code Playgroud)
因为这两种方法既不会被覆盖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;
}
Run Code Online (Sandbox Code Playgroud)
这样你可以保存内存并仍然返回List
interace.
归档时间: |
|
查看次数: |
106 次 |
最近记录: |