arraylist和List之间的区别

时间:2013-07-13 03:03:34

标签: java arraylist

使用Array List和List有什么区别。实际上,当我想用​​自己实例化List时,Java会抛出异常,实际上我必须使用ArrayList来实现它。

4 个答案:

答案 0 :(得分:1)

List是一个抽象类型 - 一个java interface。接口定义了在实现List的对象上可以找到哪些方法。

ArrayListList接口的具体实现(在内部使用数组来存储元素,因此名称)。

ArrayListList,但List不是必然 ArrayList。还有其他实现,例如LinkedList

请参阅Liskov substitution principle

答案 1 :(得分:0)

列表是一个界面, ArrayList 是一个实现列表的类。您无法实例化接口。

答案 2 :(得分:0)

List是一种通用类型的对象,称为接口。有许多类型的列表,包括但不限于ArrayList和LinkedList。 list接口提供了操作列表所需的一组方法的句柄,而不知道它是什么类型的列表。可以将任何类型的列表分配给List类型的变量。但是列表本身无法实例化,因为它只是一个接口而不是一个实现。有关更多信息,请参阅Java列表教程。 http://docs.oracle.com/javase/tutorial/collections/interfaces/list.html

答案 3 :(得分:0)

您的代码抛出异常原因List是抽象的,您无法实例化抽象的东西。

列表是一个界面。在这里,您可以定义合同此类型的行为签名。

ArrayList是一个List,因为implements List ArrayList是一个具体的实现,所以然后让List接口定义所有方法。

在Java中,您显然可以实例化一个创建anonymous classes的接口,但是您确实有一个具体的类,它使用无名称实现List契约(这就是匿名的原因)。

这是一个例子

List list = new List(){

            @Override
            public boolean add(Object arg0) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public void add(int arg0, Object arg1) {
                // TODO Auto-generated method stub

            }

            @Override
            public boolean addAll(Collection arg0) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public boolean addAll(int arg0, Collection arg1) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public void clear() {
                // TODO Auto-generated method stub

            }

            @Override
            public boolean contains(Object arg0) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public boolean containsAll(Collection arg0) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public Object get(int arg0) {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public int indexOf(Object arg0) {
                // TODO Auto-generated method stub
                return 0;
            }

            @Override
            public boolean isEmpty() {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public Iterator iterator() {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public int lastIndexOf(Object arg0) {
                // TODO Auto-generated method stub
                return 0;
            }

            @Override
            public ListIterator listIterator() {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public ListIterator listIterator(int arg0) {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public boolean remove(Object arg0) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public Object remove(int arg0) {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public boolean removeAll(Collection arg0) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public boolean retainAll(Collection arg0) {
                // TODO Auto-generated method stub
                return false;
            }

            @Override
            public Object set(int arg0, Object arg1) {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public int size() {
                // TODO Auto-generated method stub
                return 0;
            }

            @Override
            public List subList(int arg0, int arg1) {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public Object[] toArray() {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public Object[] toArray(Object[] arg0) {
                // TODO Auto-generated method stub
                return null;
            }

        };

正如@Bohemian所说,如果你自己创建列表,你必须要关注Liskov Substitution Principle,不要打破这个并遵循合同。