【问题标题】:Difference between Collection and Arraylist in Java? [duplicate]Java中Collection和Arraylist的区别? [复制]
【发布时间】:2013-01-11 06:06:49
【问题描述】:

可能重复:
What is the benefit of polymorphism using Collection interface to create ArrayList object?

 ArrayList al=new ArrayList();
 Collection c=new ArrayList();

对象alc 有什么区别?他们两个是一样的还是什么?

【问题讨论】:

    标签: java


    【解决方案1】:

    集合 API 是一组支持对对象集合进行操作的类和接口。

    类示例:HashSet、HashMap、ArrayList、LinkedList、TreeSet 和 TreeMap。 接口示例:Collection、Set、List 和 Map。

    鉴于, ArrayList:它是可重新调整大小的数组实现。属于集合中的“列表”组。它允许所有元素,包括 null。它不是线程安全的。

    集合:它实现了对集合进行操作的多态算法。

    Collection:它是集合层次结构中的根接口。

    以下接口(集合类型)扩展了 Collection 接口:

    • 列表
    • 设置
    • 排序集
    • 可导航集
    • 队列
    • 双端队列

    Java 不附带 Collection 接口的可用实现,因此您必须使用列出的子类型之一。 Collection 接口只定义了这些 Collection 子类型中的每一个共享的一组方法(行为)。这使得可以忽略您正在使用的特定类型的集合,并将其视为集合。这是标准继承,所以没有什么神奇之处,但有时它仍然是一个不错的功能。

    【讨论】:

    • 在我看来,这不是对“微不足道的问题”的回答。它没有解释为什么对象 al 和 c 根本不同。
    【解决方案2】:

    第二个是coding to interfaces。它允许将ArrayList 替换为另一个Collection(例如VectorTreeSet),而不会产生任何副作用。

    【讨论】:

      【解决方案3】:

      创建了相同的对象,但引用不同。

      因此,在第二种情况下,您只能使用 ArrayList,就好像它只是 Collection,除非强制转换。

      【讨论】:

      • “问题太简单了”,但只有这个答案才是问题的核心。
      【解决方案4】:

      Collection 是一个Interface。看看方法。

      List interface 具有按索引访问的方法。 List 还扩展了Collection 接口。

      ArrayList 是实现List 接口的具体实现。数组列表

      你所做的是一些抽象。

      如果你这样做:

      Collection foo = new ArrayList();
      

      您将无法访问List 接口方法。比如用索引访问。

      【讨论】:

        【解决方案5】:

        al 中,您只能使用数组列表。除了arraylist,你不能转换/转换任何东西。

        c 中,您可以转换/转换任何实现Collection 接口的类。

        【讨论】:

          【解决方案6】:
          Collection foo = new ArrayList();
          

          这个更通用,你可以得到 Collection 的其他实现的好处。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-24
            • 2018-02-06
            • 2011-11-10
            • 2017-04-12
            • 2011-11-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多