【问题标题】:diferrence between arraylist and List [duplicate]arraylist 和 List 之间的区别 [重复]
【发布时间】:2013-07-11 16:24:54
【问题描述】:

使用数组列表和列表有什么区别。实际上,当我想用​​ istself 实例化 List 时,Java 会抛出一个异常,实际上我必须使用 ArrayList 来实现。

【问题讨论】:

标签: java arraylist


【解决方案1】:

您的代码引发异常,因为 List 是抽象的,您无法实例化抽象的东西。

列表是一个接口。在这里你定义合约这个类型的行为签名。

ArrayList 是一个 List ,因为implements ListArrayList 是一个具体的实现 所以所有的方法都由 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,不要违反此规定并遵守合同。

【讨论】:

    【解决方案2】:

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

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

    ArrayListList,但List 不一定ArrayList。还有其他实现,比如LinkedList

    Liskov substitution principle

    【讨论】:

    • 我会窃取liskov替换原理xD
    • @nachokk 实际上,这是一个很好的链接,只需提供一个答案即可赋予它百科全书式的权威感 :)
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      List是一个接口,ArrayList是一个实现List的类。你不能实例化一个接口。

      【讨论】:

      • 好吧,你几乎可以用匿名类来实例化一个接口。
      • 从技术上讲,匿名类是一个,但感觉就像是在实例化一个接口。
      猜你喜欢
      • 2012-07-24
      • 2015-05-22
      • 2015-07-01
      • 2011-06-03
      • 2013-12-20
      • 2015-04-13
      • 2014-06-27
      • 1970-01-01
      • 2014-01-03
      相关资源
      最近更新 更多