Java 集合深入理解 :Collection接口和list接口对比

Posted 踩踩踩从踩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 集合深入理解 :Collection接口和list接口对比相关的知识,希望对你有一定的参考价值。

前言
List接口是继承自Collection接口,在collection接口上做一些扩展,相对于一些基本操作增加了一些包括视图,位置查询等操作

方法操作对比

Collection方法
在这里插入图片描述
list方法
在这里插入图片描述
Collection (集合)的操作:
1.查询操作
size isEmpty contains iterator toArray
2. 修改操作
add remove
3.批量修改操作
containsAll addAll removeAll retainAll clear
4.比较和散列
equals hashCode
5.default 默认方法
spliterator stream

List (列表)的操作:
1.查询操作
size isEmpty contains iterator toArray
2. 修改操作
add remove
3. 批量修改操作
containsAll addAll removeAll retainAll clear sort
4.比较和散列
equals hashCode

5.位置访问操作
get set add(int index, E element) remove(int index)

6.搜索 操作
indexOf lastIndexOf

7.List 迭代器
listIterator listIterator

8.视图
subList spliterator

两者方法对比操作

  1. list和collection 共有的一些操作
    size isEmpty contains iterator toArray containsAll addAll removeAll retainAll clear equals hashCode
  2. list接口 扩展的接口
    位置访问操作
    get(int index, E element) set add(int index, E element) remove(int index)
    sort
    搜索 操作
    indexOf lastIndexOf
    list接口对collection进行了扩展
    视图
    subList spliterator

注释中看功能上的差异

Collection 注释

/**
 *<i>集合层次结构中的根接口。收藏表示一组对象,称为其<i>元素</i>。一些
 *集合允许重复元素,而其他集合则不允许。有些是订购的
 *其他的都是无序的。JDK不提供任何<i>直接<i>这个接口的实现:它提供了更多
 *特定子接口,如<tt>Set</tt>和<tt>List</tt>。此接口通常用于传递集合并在其中进行操作
 *需要最大的通用性。<p><i>袋子</i>或<i>多套</i>(可能包含重复元素)应直接实现此接口。
 *<p>所有通用<tt>集合</tt>实现类通常通过一个子接口)应提供两个“标准”构造函数:void(no
 *参数)构造函数,它创建一个空集合,以及具有<tt>Collection</tt>类型的单个参数的构造函数
 *使用与其参数相同的元素创建新集合。在效果是,后一个构造函数允许用户复制任何集合,
 *生成所需实现类型的等效集合。无法强制执行此约定(因为接口不能包含但所有的通用<tt>集合</tt>
 *Java平台库中的实现符合。
 *<p>此接口中包含的“破坏性”方法,即将修改其操作的集合的方法指定为
 *如果此集合不支持,则抛出UnsupportedOperationException
 *支持操作。如果是这种情况,这些方法可能是,但不是
 *如果调用对集合没有影响。例如,调用不可修改集合上的{@link#addAll(Collection)}方法可能,
 *但不是必需的,如果要添加集合,则抛出异常
 *是空的。
  *<p><a name=“可选限制”>
 *某些集合实现对它们可能包含。</a>例如,某些实现禁止空元素,
 *有些对元素的类型有限制。试图添加不符合条件的元素会引发未检查的异常,通常是
 *<tt>NullPointerException</tt>或<tt>ClassCastException</tt>。正在尝试
 *查询不合格元素的存在可能引发异常,或者它可能只是返回false;一些实现将展示前者
 *有些人会表现出后者。一般来说,尝试对不合格元素的操作,其完成不会导致
 *在集合中插入不符合条件的元素可能会引发例外或它可能会成功,在执行的选择。
 *此类例外情况在本规范中标记为“可选”接口
*<p>由每个集合决定自己的同步政策。在政府没有更强有力的保证的情况下
*实现时,调用可能会导致未定义的行为集合中被另一个方法变异的任何方法
*螺纹;这包括直接调用,将集合传递给可能执行调用的方法,并使用现有迭代器来检查集合。
*<p>集合框架接口中的许多方法在
*{@link Object#equals(Object)equals}方法的术语。例如,
*{@link#contains(Object)contains(Object o)}的规范
*方法说:“当且仅当此集合包含至少一个元素
*<tt>(o==null?e==null:o.equals(e))</tt>“此规范应
*<i>not</i>应解释为暗示调用<tt>Collection.contains</tt>
*对于非空参数,<tt>o</tt>将导致<tt>o.equals(e)</tt>为
*为任何元素调用<tt>e</tt>。实现可以自由实现避免调用<tt>等于</tt>的优化,例如
*例如,首先比较两个元素的哈希码(这个{@link Object#hashCode()}规范保证
*不相等的哈希码不能相等。)更一般地说各种集合框架接口可以自由利用
*底层{@link Object}方法的指定行为实施者认为合适。
*<p>执行递归遍历收集可能会失败,但自引用实例例外,其中
*集合直接或间接包含自身。这包括
*{@code clone()}、{@code equals()}、{@code hashCode()}和{@code toString()}
*方法。实施方法。实现可以选择性地处理自引用场景,但是,当前大多数实现都不这样做。
 * @author  Josh Bloch
 * @author  Neal Gafter
 * @see     Set
 * @see     List
 * @see     Map
 * @see     SortedSet
 * @see     SortedMap
 * @see     HashSet
 * @see     TreeSet
 * @see     ArrayList
 * @see     LinkedList
 * @see     Vector
 * @see     Collections
 * @see     Arrays
 * @see     AbstractCollection
 * @since 1.2
 *

list的注释

/**
*有序的集合(也称为序列)。此的用户接口可以精确控制每个元素在列表中的位置
*插入。用户可以通过元素的整数索引(在列表),并搜索列表中的元素。<p>
*与集合不同,列表通常允许重复的元素。更正式地说,列表通常允许成对的元素<tt>e1</tt>和<tt>e2</tt>
*使得e1等于(e2)</tt>,它们通常允许多个如果允许空元素,则返回空元素。这不是不可想象的
*有人可能希望实现一个禁止重复的列表当用户试图插入运行时异常时引发异常,但是
*希望这种用法很少见。<p><tt>列表</tt>界面除了这些规定之外,还增加了一些规定
*在<tt>迭代器</tt>、<tt>添加</tt>、<tt>删除</tt>、<tt>等于</tt>,以及
*<tt>hashCode</tt>方法。其他继承方法的声明是
*为了方便起见,这里也包括在内。<p>
*<tt>列表</tt>接口提供了四种位置(索引)方法访问列表元素。列表(如Java数组)是基于零的。注意
*这些操作的执行时间与索引值成比例
*对于某些实现(对于示例)。因此,遍历列表中的元素通常是
*如果调用者不知道实施。<p>List接口提供了一个特殊的迭代器,称为
*ListIterator,允许元素插入和替换,以及
*除了<tt>迭代器</tt>接口提供。本发明提供了一种获得所述图像的方法
*从列表中指定位置开始的列表迭代器。<p>
*<tt>列表</tt>接口提供了两种方法来搜索指定的
*对象。从性能的角度来看,这些方法应该与小心。在许多实现中,它们将执行代价高昂的线性规划
*搜索。<p>
*<tt>List</tt>接口提供了两种方法来有效地插入和删除
*删除列表中任意一点的多个元素。<p>
*注:虽然允许列表将其自身包含为元素,建议格外小心:<tt>等于</tt>和<tt>哈希码</tt>
*方法不再在这样的列表中定义良好。<p>某些列表实现对
*它们可能包含。例如,有些实现禁止空元素,有些对元素的类型有限制。试图
*添加不符合条件的元素会引发未检查的异常,通常是
*<tt>NullPointerException</tt>或<tt>ClassCastException</tt>。正在尝试
*查询不合格元素的存在可能引发异常,或者它可能只是返回false;一些实现将展示前者
*有些人会表现出后者。一般来说,尝试对不合格元素的操作,其完成不会导致
*在列表中插入不符合条件的元素可能会引发例外或它可能会成功,在执行的选择。
*此类例外情况在本规范中标记为“可选”
*接口。
 * <p>This interface is a member of the
 * <a href="{@docRoot}/../technotes/guides/collections/index.html">
 * Java Collections Framework</a>.
 *
 * @param <E> the type of elements in this list
 *
 * @author  Josh Bloch
 * @author  Neal Gafter
 * @see Collection
 * @see Set
 * @see ArrayList
 * @see LinkedList
 * @see Vector
 * @see Arrays#asList(Object[])
 * @see Collections#nCopies(int, Object)
 * @see Collections#EMPTY_LIST
 * @see AbstractList
 * @see AbstractSequentialList
 * @since 1.2
 */

collection接口注释
集合层次结构中的根接口。收藏表示一组对象,称为其element。一些
集合允许重复元素,而其他集合则不允许。有些是订购的
其他的都是无序的。JDK不提供任何直接这个接口的实现:它提供了更多 特定子接口
list接口注释
是 collection 接口的实现 并且是有序的集合 提供了此的用户接口可以精确控制每个元素在列表中的位置插入。用户可以通过元素的整数索引(在列表),并搜索列表中的元素。 并且 允许元素插入和替换,以及从列表中指定位置开始的列表迭代器 ,以及 删除列表中任意一点的多个元素。 等等操作。

各自的抽象类实现

Java 集合深入理解 (六) :理解公共List接口的抽象类(AbstractList)

Java 集合深入理解 (七) :理解公共Collection接口的抽象类(AbstractCollection)

以上是关于Java 集合深入理解 :Collection接口和list接口对比的主要内容,如果未能解决你的问题,请参考以下文章

深入Java源码解析容器类ListSetMap

Java 集合深入理解 :AbstractCollection类

深入理解java集合框架之---------Arraylist集合

Java集合详解5:深入理解LinkedHashMap和LRU缓存

深入理解JAVA集合系列四:ArrayList源码解读

深入理解JAVA集合系列四:ArrayList源码解读