对于类型List <integer> </integer>,方法trimToSize()未定义

时间:2015-03-24 01:38:02

标签: java list arraylist

我正在运行以下代码,但收到错误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的方法?

再次感谢!

2 个答案:

答案 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)