Java基础之Collection与Collections浅析

一、前言:

  位于Java.util包下的Collection与Collections都是Java中重要的工具类,它们都是Java集合框架的成员,这俩个类对于Java基础不太好的朋友来说很容易搞混,现在我对其做一简单辨析

二、Collection简单介绍:

  2.1Collection概述

  Collection是Java集合框架的顶级接口(注意:它是一个接口),继承了Iterable接口

  它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。

  Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。

  JDK不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。
  包 (bag) 或多集合 (multiset)(可能包含重复元素的无序 collection)应该直接实现此接口。
  所有通用的 Collection 实现类(通常通过它的一个子接口间接实现 Collection)应该提供两个“标准”构造方法:一个是 void(无参数)构造方法,用于创建空 collection;另一个是带有 Collection 类型单参数的构造方法,用于创建一个具有与其参数相同元素新的 collection。实际上,后者允许用户复制任何 collection,以生成所需实现类型的一个等效 collection。尽管无法强制执行此约定(因为接口不能包含构造方法),但是 Java 平台库中所有通用的 Collection 实现都遵从它。
  此接口中包含的“破坏性”方法,是指可修改其所操作的 collection 的那些方法,如果此 collection 不支持该操作,则指定这些方法抛出 UnsupportedOperationException。如果是这样,那么在调用对该 collection 无效时,这些方法可能,但并不一定抛出 UnsupportedOperationException。例如,如果要添加的 collection 为空且不可修改,则对该 collection 调用 addAll(Collection) 方法时,可能但并不一定抛出异常。
  一些 collection 实现对它们可能包含的元素有所限制。例如,某些实现禁止 null 元素,而某些实现则对元素的类型有限制。试图添加不合格的元素将抛出一个未经检查的异常,通常是 NullPointerException 或 ClassCastException。试图查询是否存在不合格的元素可能抛出一个异常,或者只是简单地返回 false;某些实现将表现出前一种行为,而某些实现则表现后一种。较为常见的是,试图对某个不合格的元素执行操作且该操作的完成不会导致将不合格的元素插入 collection 中,将可能抛出一个异常,也可能操作成功,这取决于实现本身。这样的异常在此接口的规范中标记为“可选”。
  由每个 collection 来确定其自身的同步策略。在没有实现的强烈保证的情况下,调用由另一进程正在更改的 collection 的方法可能会出现不确定行为;这包括直接调用,将 collection 传递给可能执行调用的方法,以及使用现有迭代器检查 collection。

  2.2常用方法摘要:

  • boolean add(E e)
  确保此 collection 包含指定的元素(可选操作)。
  • boolean addAll(Collection<? extends E> c)
  将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
  • void clear()
  移除此 collection 中的所有元素(可选操作)。
  • boolean contains(Object o)
  如果此 collection 包含指定的元素,则返回 true。
  • boolean containsAll(Collection<?> c)
  如果此 collection 包含指定 collection 中的所有元素,则返回 true。
  • boolean equals(Object o)
  比较此 collection 与指定对象是否相等。
  • int hashCode()
  返回此 collection 的哈希码值。
  • boolean isEmpty()
  如果此 collection 不包含元素,则返回 true。
  • Iterator<E> iterator()
  返回在此 collection 的元素上进行迭代的迭代器。
  • boolean remove(Object o)
  从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
  • boolean removeAll(Collection<?> c)
  移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
  • boolean retainAll(Collection<?> c)
  仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
  • int size()
  返回此 collection 中的元素数。
  • Object[] toArray()
  返回包含此 collection 中所有元素的数组。
  • <T> T[]toArray(T[] a)
  返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

三、collections简单介绍:

  3.1Collections简单概述:

  java.util.Collections 是一个包装类(工具类/帮助类)。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,用于对集合中元素进行排序、搜索以及线程安全等各种操作,服务于Java的Collection框架。

  Collections中的方法都是静态方法,这正好体现了工具类的设计原则,便于开发者直接调用;

  此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新 collection,以及少数其他内容。

  如果为此类的方法所提供的 collection 或类对象为 null,则这些方法都将抛出 NullPointerException

  此类中所含多态算法的文档通常包括对实现 的简短描述。应该将这类描述视为实现注意事项,而不是规范 的一部分。实现者应该可以随意使用其他算法替代,只要遵循规范本身即可。(例如,sort 使用的算法不一定是合并排序算法,但它必须是稳定的。)

  此类中包含的“破坏性”算法,即可修改其所操作的 collection 的算法,该算法被指定在 collection 不支持适当的可变基元(比如 set 方法)时抛出 UnsupportedOperationException。如果调用不会对 collection 产生任何影响,那么这些算法可能(但不要求)抛出此异常。例如,在已经排序的、不可修改列表上调用 sort 方法可能会(也可能不会)抛出 UnsupportedOperationException

  3.2常用方法摘要:

static <T> boolean
addAll(Collection<? super T> c, T... elements)
          将所有指定元素添加到指定 collection 中。
static <T> Queue<T>
asLifoQueue(Deque<T> deque)

          以后进先出 (Lifo) Queue 的形式返回某个 Deque
的视图。
static <T>
int
binarySearch(List<? extends Comparable<? super T>> list,
T key)

          使用二分搜索法搜索指定列表,以获得指定对象。
static <T>
int
binarySearch(List<? extends
T> list, T key, Comparator<? super T> c)


          使用二分搜索法搜索指定列表,以获得指定对象。
static <E> Collection<E>
checkedCollection(Collection<E> c, Class<E> type)

          返回指定 collection 的一个动态类型安全视图。
static <E> List<E>
checkedList(List<E> list,
Class<E> type)


          返回指定列表的一个动态类型安全视图。
static <K,V> Map<K,V>
checkedMap(Map<K,V> m, Class<K> keyType, Class<V> valueType)

          返回指定映射的一个动态类型安全视图。
static <E> Set<E>
checkedSet(Set<E> s, Class<E> type)

          返回指定 set 的一个动态类型安全视图。
static <K,V> SortedMap<K,V>
checkedSortedMap(SortedMap<K,V> m, Class<K> keyType, Class<V> valueType)

          返回指定有序映射的一个动态类型安全视图。
static <E> SortedSet<E>
checkedSortedSet(SortedSet<E> s, Class<E> type)

          返回指定有序 set 的一个动态类型安全视图。
static <T>
void
copy(List<? super
T> dest, List<? extends T> src)


          将所有元素从一个列表复制到另一个列表。
static boolean disjoint(Collection<?> c1, Collection<?> c2)

          如果两个指定 collection 中没有相同的元素,则返回 true
static <T> List<T>
emptyList()

          返回空的列表(不可变的)。
static <K,V> Map<K,V>
emptyMap()

          返回空的映射(不可变的)。
static <T> Set<T>
emptySet()

          返回空的 set(不可变的)。
static <T> Enumeration<T>
enumeration(Collection<T> c)

          返回一个指定 collection 上的枚举。
static <T>
void
fill(List<? super
T> list, T obj)

          使用指定元素替换指定列表中的所有元素。
static int frequency(Collection<?> c, Object o)

          返回指定 collection 中等于指定对象的元素数。
static int indexOfSubList(List<?> source, List<?> target)

          返回指定源列表中第一次出现指定目标列表的起始位置;如果没有出现这样的列表,则返回 -1。
static int lastIndexOfSubList(List<?> source, List<?> target)

          返回指定源列表中最后一次出现指定目标列表的起始位置;如果没有出现这样的列表,则返回 -1。
static <T> ArrayList<T>
list(Enumeration<T> e)

          返回一个数组列表,它按返回顺序包含指定枚举返回的元素。
static <T extends Object & Comparable<? super T>> T

max(Collection<? extends
T> coll)

          根据元素的自然顺序,返回给定 collection
的最大元素。
static <T>
T
max(Collection<? extends T> coll,
Comparator<? super
T> comp)

          根据指定比较器产生的顺序,返回给定 collection 的最大元素。
static <T extends Object & Comparable<? super T>> T

min(Collection<? extends
T> coll)

          根据元素的自然顺序 返回给定 collection
的最小元素。
static <T>
T
min(Collection<? extends T> coll,
Comparator<? super
T> comp)

          根据指定比较器产生的顺序,返回给定 collection 的最小元素。
static <T> List<T>
nCopies(int n,
T o)

          返回由指定对象的 n 个副本组成的不可变列表。
static <E> Set<E>
newSetFromMap(Map<E,Boolean> map)

          返回指定映射支持的 set。
static <T>
boolean
replaceAll(List<T> list,
T oldVal, T newVal)

          使用另一个值替换列表中出现的所有某一指定值。
static void reverse(List<?> list)

          反转指定列表中元素的顺序。
static <T> Comparator<T>
reverseOrder()

          返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection
的自然顺序。
static <T> Comparator<T>
reverseOrder(Comparator<T> cmp)

          返回一个比较器,它强行逆转指定比较器的顺序。
static void rotate(List<?> list,
int distance)

          根据指定的距离轮换指定列表中的元素。
static void shuffle(List<?> list)

          使用默认随机源对指定列表进行置换。
static void shuffle(List<?> list,
Random rnd)


          使用指定的随机源对指定列表进行置换。
static <T> Set<T>
singleton(T o)

          返回一个只包含指定对象的不可变 set。
static <T> List<T>
singletonList(T o)

          返回一个只包含指定对象的不可变列表。
static <K,V> Map<K,V>
singletonMap(K key,
V value)

          返回一个不可变的映射,它只将指定键映射到指定值。
static <T extends Comparable<? super T>> void

sort(List<T> list)

          根据元素的自然顺序 对指定列表按升序进行排序。
static <T>
void
sort(List<T> list,
Comparator<? super T> c)


          根据指定比较器产生的顺序对指定列表进行排序。
static void swap(List<?> list,
int i, int j)

          在指定列表的指定位置处交换元素。
static <T> Collection<T>
synchronizedCollection(Collection<T> c)

          返回指定 collection 支持的同步(线程安全的)collection。
static <T> List<T>
synchronizedList(List<T> list)

          返回指定列表支持的同步(线程安全的)列表。
static <K,V> Map<K,V>
synchronizedMap(Map<K,V> m)

          返回由指定映射支持的同步(线程安全的)映射。
static <T> Set<T>
synchronizedSet(Set<T> s)
          返回指定
set 支持的同步(线程安全的)set。
static <K,V> SortedMap<K,V>
synchronizedSortedMap(SortedMap<K,V> m)

          返回指定有序映射支持的同步(线程安全的)有序映射。
static <T> SortedSet<T>
synchronizedSortedSet(SortedSet<T> s)

          返回指定有序 set 支持的同步(线程安全的)有序 set。
static <T> Collection<T>
unmodifiableCollection(Collection<? extends
T> c)

          返回指定 collection 的不可修改视图。
static <T> List<T>
unmodifiableList(List<? extends
T> list)

          返回指定列表的不可修改视图。
static <K,V> Map<K,V>
unmodifiableMap(Map<? extends K,?
extends V> m)

          返回指定映射的不可修改视图。
static <T> Set<T>
unmodifiableSet(Set<? extends
T> s)

          返回指定 set 的不可修改视图。
static <K,V> SortedMap<K,V>
unmodifiableSortedMap(SortedMap<K,? extends
V> m)

          返回指定有序映射的不可修改视图。
static <T> SortedSet<T>
unmodifiableSortedSet(SortedSet<T> s)

          返回指定有序 set 的不可修改视图。

四、Collection与Collections的异同:

  • 相同点:二者都是Java集合框架的成员,都位于java.util包下
  • 不同之处:Collection是Java集合框架的顶级接口,继承自Iterable,他是一个泛型接口,充分的体现了Java的多态性

  Collections是Java集合框架的工具类,服务于Collection。提供了对Java集合操作的各种静态方法

  参考:https://baike.baidu.com/item/COLLECTION/80124?fr=aladdin

Java基础之Collection与Collections浅析的更多相关文章

  1. Java基础之多态和泛型浅析

    Java基础之多态和泛型浅析 一.前言: 楼主看了许多资料后,算是对多态和泛型有了一些浅显的理解,这里做一简单总结 二.什么是多态? 多态(Polymorphism)按字面的意思就是“多种状态”.在面 ...

  2. Java学习笔记--Collection和Collections的区别

    转自 http://pengcqu.iteye.com/blog/492196 比较Collection 和Collections的区别.   1.java.util.Collection 是一个集合 ...

  3. Java基础学习-Collection体系结构和迭代测试

    package Collection; import java.util.ArrayList; import java.util.Collection; import java.util.Iterat ...

  4. ——Java中的collection和collections的区别

    1.java.util.Collection 是一个集合接口(集合类的一个顶级接口).它提供了对集合对象进行基本操作的通用接口方法.Collection接口在Java 类库中有很多具体的实现.Coll ...

  5. 【JAVA - 基础】之Annotation注解浅析

    注解在JAVA中,尤其是一些ORM框架(如Hibernate等)中是比较常用的一种机制. 注解是JAVA 1.5之后引入的新功能,正确来说是反射的一部分,没有反射,注解也就无法正常使用.注解可以理解成 ...

  6. Java基础学习-Collection

    package Collection; import java.util.ArrayList; import java.util.Scanner; /*集合类的特点: * 大小可变 * * Array ...

  7. java基础-Comparator接口与Collections实现排序算法

    java 排序Comparable和Comparator使用 java提供了两个排序用的接口Comparable和Comparator,一般情况下使用区别如下: Comparable 接口用于类的固定 ...

  8. Java基础之Comparable接口, Collections类,Iterator接口,泛型(Generic)

    一.Comparable接口, Collections类 List的常用算法: sort(List); 排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个 ...

  9. Java集合(三)--Collection、Collections和Arrays

    Collection: Collection是集合类的顶级接口,提供了对集合对象进行基本操作的通用接口方法.Collection接口的意义是为各种具体的集合提供了最大化 的统一操作方式,其直接继承接口 ...

随机推荐

  1. 【Arduino】66种传感器模块系列实验(2)---光敏电阻模块

    实验二:光敏电阻传感器模块我手里这块是三针版的,挺秀气吧 光敏电阻是用硫化隔或硒化隔等半导体材料制成的特殊电阻器,其工作原理是基于内光电效应.光照愈强,阻值就愈低,随着光照强度的升高,电阻值迅速降低, ...

  2. HashSet源码解读

    一:先看其实现了哪些接口和继承了哪些类 1.实现了Serializable接口,表明它支持序列化. 2.实现了Cloneable接口,表明它支持克隆,可以调用超类的clone()方法进行浅拷贝. 3. ...

  3. C#中谁最快:结构还是类?

    前言 在内存当道的日子里,无论什么时候都要考虑这些代码是否会影响程序性能呢? 在现在的世界里,几乎不会去考虑用了几百毫秒,可是在特别的场景了,往往这几百毫米确影响了整个项目的快慢. 通过了解这两者之间 ...

  4. 高级查询MYsql(二) 练习

    一.单词部分 ①exist存在②temp临时的③district区域 ④content内容⑤temporary暂时的 二.预习部分 1.表连接都可以用子查询替换吗 是的 2.检测某列是否存在某个范围可 ...

  5. 移动端开发用touch事件还是click事件

    前端开发现在包含了跨浏览器,跨平台(不同操作系统)和跨设备(不同尺寸的设备)开发. 在移动开发的过程中,到底选取touch事件还是click事件?对了,请不要鄙视click,click在移动端开发用着 ...

  6. Asp.Net Core 发布到 Docker(Linux Centos 虚拟机,使用Dockerfile)

    实践一下 Asp.Net Core (基于.net core 2.2)部署到Docker 一.准备工作: 1. 使用Virtualbox创建一个Centos系统的虚拟机,并安装docker和vim 2 ...

  7. vmware15pro安装ubuntu18.10时出现显示不全问题

    如果这个时候用网上的ALT+左键拖拽根本没有效果 所以这里提供另外一种方式 就是正常安装的时候发现分区部分显示不全 此时点击右上角的橙色小×:询问是否退出 我们点击退出:之后就会来到试用界面 到了这里 ...

  8. Web项目如何做单元测试

    你可能会用单元测试框架,python的unittest.pytest,Java的Junit.testNG等. 那么你会做单元测试么!当然了,这有什么难的? test_demo.py def inc(x ...

  9. Cobbler 自动安装CentOS7

    1. Cobbler介绍 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等.Cobbler可以使用命 ...

  10. 分布式ID系列(4)——Redis集群实现的分布式ID适合做分布式ID吗

    首先是项目地址: https://github.com/maqiankun/distributed-id-redis-generator 关于Redis集群生成分布式ID,这里要先了解redis使用l ...