我正在运行以下代码,但收到错误The method trimToSize() is undefined for the type List<Integer>
public class ListPerformance {
public static void main(String args[]) {
List<Integer> array = new ArrayList<Integer>();
List<Integer> linked = new LinkedList<Integer>();
//Initialize array with random elements in the first 50 positions, do other operations
addElement(array,"beginning");
//Resize to 100
for(int a=100;a<array.size();a++) {
array.remove(a);
}
linked.trimToSize();
}
...
我认为我按照this tutorial on ArrayList.trimToSize()所示正确完成了所有事情。为什么我不能在这里使用.trimToSize()
?
EDIT2:感谢海报/评论者,我现在知道我的错误是使用List而不是ArrayList创建元素。但是自定义方法呢?我应该把它们作为arraylist /链表或常规ol&#39;名单?什么被认为是&#34;良好实践&#34;?或者这还取决于我是否需要使用特定于ArrayList的方法?
再次感谢!
答案 0 :(得分:4)
trimToSize()
是ArrayList
类的方法,而不是List
接口。由于您将变量存储为List<Integer>
,因此您只能使用属于List
界面的方法。
将变量声明更改为:
ArrayList<Integer> array = new ArrayList<Integer>();
LinkedList<Integer> linked = new LinkedList<Integer>();
只要您尝试修剪main
,您的array
就可以了。你根本无法修剪linked
,因为修剪LinkedList
是没有意义的;它们不会分配超出其容量的额外缓冲区空间,因为附加到LinkedList
总是 O(1),其中附加到完整ArrayList
的是 O( n)的
答案 1 :(得分:1)
trimToSize()是ArrayList的一种方法,但不是List的方法。并非所有列表都可以修剪(例如:LinkedList)
List<Integer> linked = new LinkedList<Integer>();
linked.trimToSize();
您在LinkedList上调用它。如果要在ArrayList上调用它,请使用
ArrayList<Integer> array = new ArrayList<Integer>();
而不是第一行。 (告诉你的编译器它不是任何List,而是一个ArrayList)