谈谈Collection

前言

这一篇讲的collection接口;首先,集合是用来存储数据的,它是基于某种数据结构数据容器。常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。集合大类分为了Collection和Map如下图

Collection

这一篇文章的内容——现在讲下collection,“集合、容器”,用来存储数据的,它是一个接口,不能直接实例化使用;只能通过它的子类来完成,从上图来看,Collection分为List和Set,List集合中的元素是有序的、可重复的,而Set集合中的元素是无序的、不能重复的。List集合强调的是有序,Set集合强调的是不重复。下面是它的已知实现类。

Collection是描述所有序列容器的共性的根接口,可能会被认为是一个附属接口,即因为要表示其他若干个接口的共性而出现的接口。同时为什么要将其作为接口?是因为可以使我们能够创建更通用的代码。通过针对接口而非具体实现来编写代码,这样,才可以更好地应用于更多的对象类型。

下面的是Collection更加仔细一点的分类。今天这篇重点介绍一下Collection的几个方法,掌握了这些,对于它的子类都是可以直接拿来用的。子类的介绍后面再总结出来。

方法

遇到一些自己不熟的知识点,在IDEA上可以直接查看该接口的详细源码(ctrl加鼠标左键),点开旁边的结构图按钮,可以直观得去查看这些方法

1.boolean add(E)

这个一看就知道了,就是添加功能,往集合里面添加元素或者对象的方法,若是list这种,因为它返回都是true,一般情况下,可以随便往里面添加。

Collection s = new Collection();
s.add(你要添加的);
s.add("你要添加的");

有时需要注意的时候,如果操作的集合是不允许重复值的,往里面添加就会报错。返回的是false.

2.void clear()

移除容器中的所有元素,该集合不支持移除的话就会抛出UnsupportedOperationException异常(不支持该操作)

//接着用上面的s集合
s.clear();
//这时候集合为空了

3.boolean contains(Object o)

用来检查此集合是否包含指定元素或者对象,包含则返回true不包含就返回false;会返回两种错误。

4.boolean isEmpty()

用来检查集合中是否为空,如果为空就返回true。

5.Iterator iterator()

返回一个Iterator迭代器,这个方法是用来遍历集合中的元素的,在一些需要获取集合中的元素(包括打印输出,调用等场景下),依赖于集合而存在的,有next方法和hasNext方法。

这两个方法一般情况下都是绑定一起用的。形式如下。

//其主要的用法如下,遍历的功能
//通过集合对象获取迭代器对象
Iterator i = 集合.iterator();
//hasNext方法是布尔型的返回值,有元素在集合里面的时候就会返回true
while(it.hasNext()){
System.out.println(it.next());
}

6.int size()

用来返回的集合的长度,也就是集合里面的元素的个数。

//直接使用,返回长度
集合.size();

7.Boolean remove()

用来删除集合中的元素,对象,只要有移除动作就会返回true。

总结

什么是可选操作

在看源码的时候,会发现有些方法在后面会标记为可选操作 (optional operation)。

执行各种不同的添加和移除的方法在Colletion接口中都是可选操作,这意味着实现类并不需要为这些方法提供功能定义。......如果一个操作是可选的,编译器仍旧会严格要求你只能调用该接口中的方法。

它声明调用某些方法将不会执行有意义的行为,相反,它们会抛出异常。 ——《Java编程思想》

异常UnsupportedOperationException(这个和上面讲remove时候不支持操作的时候抛出一样的异常)

大概意思是collection子类可以重写这个方法以达到子类自己的目的,也可以不覆盖这个方法但是。没有实现这个方法的子类使用这个方法的话会抛出UnsupportedOperationException异常。(这个未获得支持的异常在运行时候才能探测到,属于动态类型异常),先看下报错的代码示例

package music.daima.ebook;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List; /**
* @author yhy
* 这个是用来观察java中的可选操作方法的一些特点以及定义使用以及报错的原因,这是书上的代码
*/
public class Unsupport { static void test(String msg, List<String> list) {
System.out.println("--- " + msg + " ---");
Collection<String> c = list;
Collection<String> subList = list.subList(1,8);
Collection<String> c2 = new ArrayList<String>(subList);
try {
c.retainAll(c2);
}
catch(Exception e) {
System.out.println("retainAll(): " + e);
}
try { c.removeAll(c2); } catch(Exception e) {
System.out.println("removeAll(): " + e);
}
try { c.clear(); } catch(Exception e) {
System.out.println("clear(): " + e);
}
try { c.add("X"); } catch(Exception e) {
System.out.println("add(): " + e);
}
try { c.addAll(c2); } catch(Exception e) {
System.out.println("addAll(): " + e);
}
try { c.remove("C"); } catch(Exception e) {
System.out.println("remove(): " + e);
}
// The List.set() 虽然改变了值但没有改变它的数据结构尺寸
try {
list.set(0, "X");
} catch(Exception e) {
System.out.println("List.set(): " + e);
}
}
public static void main(String[] args) {
//asList方法:返回由指定数组支持的固定大小的列表。 (将返回的列表更改为“写入数组”。)该方法作为基于数组和基于集合的API之间的桥梁,与Collection.toArray()相结合 。
//返回的列表是可序列化的,并实现RandomAccess 。 此方法还提供了一种方便的方式来创建一个初始化为包含几个元素的固定大小的列表:
List<String> list = Arrays.asList("A B C D E F G H I J K L".split(" "));
System.out.println(list.getClass());
test("Arrays.asList()", list);
// System.out.println(list1.getClass());
test("Modifiable Copy", new ArrayList<String>(list));
//test("unmodifiableList()",Collections.unmodifiableList(new ArrayList<String>(list)));
} }

output(输出):

集合使用的整体框架(步骤)

谈谈Java的Collection接口的更多相关文章

  1. java集合——Collection接口

    Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...

  2. java.util (Collection接口和Map接口)

    1:Collection和Map接口的几个主要继承和实现类                  1.1  Collection接口 Collection是最基本的集合接口,一个Collection代表一 ...

  3. Java基础——collection接口

    一.Collection接口的定义 public interfaceCollection<E>extends iterable<E>  从接口的定义中可以发现,此接口使用了泛型 ...

  4. JAVA中Collection接口和Map接口的主要实现类

    Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素 ...

  5. Java 集合-Collection接口和迭代器的实现

    2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...

  6. java容器——Collection接口

    Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...

  7. Java容器---Collection接口中的共有方法

    1.Collection 接口 (1)Collection的超级接口是Iterable (2)Collection常用的子对象有:Map.List.Set.Queue. 右图中实现黑框的ArrayLi ...

  8. Java之Collection接口(单列集合根接口)

    集合概述 集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据 集合和数组既然都是容器,它们有啥区别呢? 区别1: 数组的长度是固定的. 集合的长度是可变的. 区别2:  数组 ...

  9. Java 之 Collection 接口

    一.Collection 集合 Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.List 和 java.util.Set. ...

随机推荐

  1. Python--day32--ftp文件传输报错的原因

    解决办法:把buffer改小 server.py #实现一个大文件的上传或下载 #配置文件 ip地址 端口号 import json import socket import struct sk = ...

  2. Springboot学习笔记(一)—— 安装

    springboot越来越流行了,相比较于springMVC,springboot采用了一种约定大于配置的理念,可以一键安装,一键运行,一键部署,内置tomcat,省去了一大堆配置的时间,并且,spr ...

  3. CSS3侧栏滑出简单实现

    使用css3 的 animation 属性实现的点击滑出侧栏 <!DOCTYPE html> <html lang="en"> <head> & ...

  4. 个人笔记-快速搭建k8s-1.16.0

    1.阿里云购买4台实例 4核16G 120G云盘 centos7.6 固定带宽1M(双主双从) https://www.aliyun.com/ 2.安装dockeryum remove docker ...

  5. python 多线程两种实现方式,Python多线程下的_strptime问题,

    python 多线程两种实现方式 原创 Linux操作系统 作者:杨奇龙 时间:2014-06-08 20:24:26  44021  0 目前python 提供了几种多线程实现方式 thread,t ...

  6. boostrap-非常好用但是容易让人忽略的地方【7】:list-unstyled list-inline

    无样式列表 list-unstyled:去掉ul的默认样式 内联列表 list-inline:将ul子元素放置于同一行

  7. 使用Git和Github来管理自己的代码和笔记

    一.Github注册 1.先注册github.com的账号,官方网站: https://github.com/ 2.登录 3.创建仓库,仓库分公开的和私有的,公开的是免费的,私有的是收费的.我现在创建 ...

  8. Python之end关键字使用

    关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下: a, b = 0, 1 while b < 1000: print(b, end=',') a, b = b, ...

  9. Linux 2>&1的意思

    2>&1的意思是将标准错误(2)也定向到标准输出(1)的输出文件中. 我们来具体了解下:Linux 中三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字是0,1, ...

  10. 第二阶段:4.商业需求文档MRD:5.PRD-原型图

    页面原型图!