Java中的集合(二)单列集合顶层接口------Collection接口

Collection是一个高度封装的集合接口,继承自Iterable接口,它提供了所有集合要实现的默认方法。由于Iterable封装了Iterator迭代器,因此Collection可以使用Iterator迭代器。 Collection用于表示一组单值对象的集合,这些对象也称为元素。 Collection接口定义了一系列抽象方法,规范了对单值类型的集合的操作标准。

一、Collection子接口或子类

Collection分别有QueueListSet三个子接口,一个AbstractCollection抽象类。由于Collection接口没有可用的实现类,所以在使用Collection时,必须使用它的子类或子接口。

二、Collection常用方法

三、Collection增加和移除元素

 String str  = "hello world";
Collection collection = new ArrayList();
collection.add("hello"); boolean isChange = collection.add(str);
boolean isWas = collection.remove(str); Iterator ite = collection.iterator(); while(ite.hasNext()) {
System.out.println(ite.next());
}

(一)、添加元素

1、使用add(E e)方法向Collection中添加元素,如果Collection的结构改变了,也就是元素添加成功了,该方法就会返回“true“,否则返回“false”;

2、如果Collection引用的是List接口或List的子类,调用add方法时,如果已经存储有该元素,那么集合中就有两个该元素(因为List接口是有序可重复的);

3、如果Collection引用的是Set接口或Set的子类,调用add方法时,如果已经存储有该元素,那么不会重复添加,保证集合中只有一个该元素(因为Set接口是无序不可重复的)。

add(E e)和addAll(Collection<? extends E> c)的区别:

当传递给方法的参数是一个集合对象时,

1、add方法添加的集合对象本身;

2、addAll方法添加的是集合对象当中的所有元素,集合对象本身不会被添加。

(二)、移除元素

使用remove(Object obj)方法移除Collection中的元素,如果Collection中存在该元素,执行完成后返回“true”,否则返回“false”。

使用removeAll(Collection<?> c)方法移除通过参数传递过来的Collection中的所有元素如果传递过来的Collection中某些元素在目标Collection中不存在,这些元素将会忽略。

retainAll(Collection<?> c)方法正好和removeAll(Collection<?> c)方法相反。不是移除所有给定参数Collection中元素,而是保留保留这些元素,移除其他的元素。

记住,只有目标Collection中已经存在了这些元素,这些元素才可以保留。在参数Collection中存在而目标Collection中不存在的元素,将不会被新增到目标Collection。它们将被忽略。

四、检测一个Collection是否包含一个确定的元素

Collection接口中有两个方法来确定Collection中是否包含一个或多个元素,这两个方法分别为:contains(Object o)和containsAll(Collection<?> c)。

1、contains(Object o):如果这个Collection含有这个元素,contains()方法将返回true,反之,返回“false”。

2、containsAll(Collection<?> c):如果这个Collection含有参数Collection中的所有元素,containsAll()方法将返回true,反之,返回“false”。

五、Collection的大小

Collection接口可以调用size()方法返回Collection的大小。

六、Collection的遍历

1、由于Collection是Iterable接口的,Iterable有封装了Iterator迭代器,所有Collection可以使用迭代器遍历元素;

2、可以使用foreach循环遍历Collection元素。

七、AbstractCollection抽象类

AbstractCollection是Collection接口的一个直接实现类,Collection接口下的子类大多继承自AbstractCollection,比如List的实现类,Set的实现类。除了iterator()和size()方法,它提供了一些其他接口的默认实现,其他集合类可以继承此类来复用。

AbstractCollection除了提供一些其他接口的默认实现,还定义了两个抽象方法,留给子类实现:

1、public abstract Iterator<E> iterator();

2、public abstract int size();

子类必须实现上面两个抽象方法。另外,AbstractCollection默认不支持添加元素的操作,直接调用add(E e)方法会报UnsupportedOperationException错误。

Java中的集合(二)单列集合顶层接口------Collection接口的更多相关文章

  1. java中Comparator的用法 -- 实现集合和数组排序

    在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标. 接下来我们模拟下在集合对象中对日期属性进行排序 一.实体类Step package com.l ...

  2. JAVA基础部分复习(二、集合类型)

    对于这些常用的集合,建议还是需要先了解一下底层实现原理,这样在不同的使用场景下才能选择更好的方案. Set介绍以及对比,常用方法: package cn.review.day02; import ja ...

  3. java中的最重要的 集合框架

    java.util这个重要的包包含大量的类和接口,支持很多的功能.例如,java.util具有能产生伪随机数的类,还包括可以管理日期和时间.观察事件.操作位集合.标记字符串.处理格式化数据等的类.ja ...

  4. java基础笔试题二(集合关系)

    知识点:java集合继承关系(Collection,Map) 1.集合框架体系图 2.java的集合层次 来自博客(http://blog.csdn.net/stubbornaccepted/arti ...

  5. java中Collections.sort()方法实现集合排序

    1.Integer/String泛型的List进行排序 List <Integer> integerlist = new ArrayList<Integer>();   //定 ...

  6. Java学习关于集合框架的基础接口--Collection接口

     集合框架(Collection  Framework)是Java最强大的子系统之一,位于java.util 包中.集合框架是一个复杂的接口与和类层次,提供了管理对象组的最新技术.Java集合框架标准 ...

  7. java中封装类(二)

    java中的数字类型包括 Byte,Short,Integer,Long,Float,Double.其中前四个是整数,后两个是浮点数. 在说java中数字类型之前先来看看它们统一的基类Number. ...

  8. java中的ArrayList 、List、LinkedList、Collection关系详解

    一.基础介绍(Set.List.Map) Set(集):集合中的元素不按特定方式排序,并且没有重复对象.他的有些实现类能对集合中的对象按特定方式排序. List(列表):集合中的元素按索引位置排序,可 ...

  9. java中的ArrayList 、List、LinkedList、Collection

    原文地址: http://www.cnblogs.com/liqiu/p/3302607.html 一.基础介绍(Set.List.Map) Set(集):集合中的元素不按特定方式排序,并且没有重复对 ...

随机推荐

  1. RF(For 循环)

    一.介绍:RobotFrameWork 支持 FOR 循环语句,语法和 Python 的语法基本相同,但 RobotFrameWork 中,"FOR" 关键字前面需要增加一个 &q ...

  2. .net core 基于Dapper 的分库分表开源框架(core-data)

    一.前言 感觉很久没写文章了,最近也比较忙,写的相对比较少,抽空分享基于Dapper 的分库分表开源框架core-data的强大功能,更好的提高开发过程中的效率: 在数据库的数据日积月累的积累下,业务 ...

  3. TCP的三次握手四次挥手理解及面试题

    一.TCP概述 每一条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到IP地址即构成了套接字, 例如,若IP地址为192.0.0.1 而端口号为8000,那么得到 ...

  4. zabbix监控nginx日志状态码

    监控需求 监控Nginx常见的状态码并对其进行监控,对常见的错误状态码创建相对应的触发器以下按照分钟对数据进行抓取 Zabbix_Agentd创建监控脚本 1)创建脚本之前核对Nginx日志格式我这里 ...

  5. Java——多线程之线程间通信

    Java多线系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多线 ...

  6. 化妆品行业的一个MES系统案例(三)

    项目的主要需求如下: (1) 管理产品的配方(物料BOM) (2) 管理产品的生产工艺(最终要将工艺参数下发到设备PLC自动执行) (3) 根据生产工单集合产品配方生成称量任务(其实领料之后的成料过程 ...

  7. N - 寿司晚宴 HYSBZ - 4197 状压dp

    N - 寿司晚宴 HYSBZ - 4197 推荐题解 这个题目我觉得还是很难的,借助题解写出来的,题解还看了很久,现在还是不是很理解. 首先这个数比较大有500,如果直接就像这个题目S - Query ...

  8. SpringMVC源码学习:容器初始化+MVC初始化+请求分发处理+参数解析+返回值解析+视图解析

    目录 一.前言 二.初始化 1. 容器初始化 根容器查找的方法 容器创建的方法 加载配置文件信息 2. MVC的初始化 文件上传解析器 区域信息解析器 handler映射信息解析 3. Handler ...

  9. 王颖奇 201771010129《面向对象程序设计(java)》第八周学习总结

    实验六 接口的定义与使用 实验时间 2018-10-18 1.实验目的与要求 (1) 掌握接口定义方法: (2) 掌握实现接口类的定义要求: (3) 掌握实现了接口类的使用要求: (4) 掌握程序回调 ...

  10. Qt之分模块log

    说明 对于一般的log,使用 qInstallMessageHandler 重定向到文件即可,甚至可以根据日志等级,分类存储.但是并不是适用所有情况,比如,程序运行时动态创建模块,而每个模块需要创建不 ...