Collection 接口的特点

Collection接口没有直接实现类,提供了更具体的子接口(如SetList)的实现。Collection实现类(通常通过其中一个子接口间接实现Collection)可以存放多个 Object 类型的元素。有些Collection接口的实现类可以存放重复的元素(List),有些则不可以(Set)。有些Collection接口的实现类是有序的(List),有些是无序的(Set)。

所有通用的Collection实现类都会提供两个"标准"构造方法:一个无参构造方法,来创建一个空的集合;以及一个带有单个Collection类型参数的构造方法,创建一个与参数集合具有相同元素的新集合。实际上,后一种构造方法可以复制任何集合,生成一个与参数集合元素相同的所需类型的集合。

public class CollectionConstructors() {
public static void main(String[] args) {
ArrayList list = new ArrayList();
System.out.println("list = " + list); // list = [] list.add(1);
list.add(2);
list.add(3);
System.out.println("list = " + list); // list = [1, 2, 3] Vector<Object> vector = new Vector<>(list);
System.out.println("vector = " + vector); // vector = [1, 2, 3]
}
}

Collection 接口常用方法

下面的代码以其间接实现类ArrayList演示Collection接口的常用方法。

public class CollectionMethod() {
public static void main(String[] args) {
Collection collection = new ArrayList<>(); // boolean add(E e)
// 给集合中添加指定的元素,添加成功则返回 true。如果此集合不允许重复元素并且已经包含了指定的元素,
// 则返回 false。支持此操作的实现类可能会对添加到该集合中的元素进行限制。如果一个集合拒绝添加某个
// 特定元素的原因不是因为集合已经包含该元素,会抛出一个异常(而不是返回 false)。
collection.add("hello");
collection.add(10);
collection.add(true);
System.out.println("collection = " + collection); // collection = [hello, 10, true] // boolean remove(Object o)
// 从集合中移除指定元素的一个实例。如果集合包含多个满足 (o==null ? e==null : o.equals(e))条件的元素 e,
// 则移除第一个元素 e。移除完成后返回 true。
collection.remove("hello");
System.out.println("collection = " + collection); // collection = [10, true] // boolean contains(Object o)
// 如果此集合包含指定元素,则返回 true。更准确地说,当且仅当此集合包含至少
// 一个满足(o==null ? e==null : o.equals(e))条件的元素 e 时,返回 true。
System.out.println(collection.contains(10));// true // int size()
// 返回此集合中的元素数量
System.out.println(collection.size());// 2 // boolean isEmpty()
// 判断集合是否为空
System.out.println(collection.isEmpty());// false // void clear()
// 清空集合中的元素
collection.clear();
System.out.println("collection = " + collection); // collection = [] // boolean addAll(Collection<? extends E> c)
// 将指定集合中的所有元素添加到此集合中
Collection collection1 = new ArrayList();
collection1.add("Mary");
collection1.add("Luck");
collection.addAll(collection1);
System.out.println("collection = " + collection); // collection = [Mary, Luck] // boolean containsAll(Collection<?> c)
// 判断此集合是否包含指定集合中的所有元素
System.out.println(collection.containsAll(collection1));// true // boolean removeAll(Collection<?> c)
// 从此集合中移除与指定集合中相同的所有元素。在此调用返回后,此集合将不包含与指定集合共有的任何元素。
collection.add("King");
collection.removeAll(collection1);
System.out.println("collection = " + collection); // collection = [King]
}
}

Collection 接口遍历元素方式

使用 Iterator(迭代器)

Iterator接口是集合的迭代器,主要用于遍历Collection集合中的元素。所有实现了Collection接口的实现类,都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器。

Iterator接口的方法:

// 判断是否还有下一个元素
boolean hasNext() // 返回集合中的下一个元素
E next() // 从底层集合中移除此迭代器返回的最后一个元素。每次调用 next() 只能调用此方法一次。
// 如果在调用此方法之前尚未调用过 next() 方法,或者在最后一次调用 next() 方法之后
// 已经调用了过一次 remove() 方法,则抛出 IllegalStateException 异常。
default void remove() // 对剩余的每个元素执行给定的操作,直到所有元素被处理完或操作抛出异常为止。
default void forEachRemaining(Consumer<? super E> action)

迭代器的使用示例代码:

public class CollectionIterateor() {
public static void main(String[] args) {
Collection col = new ArrayList();
col.add("红楼梦");
col.add("西游记");
col.add("三国演义");
col.add("水浒传"); // 遍历 col 集合
// 先获得 col 对应的迭代器
Iterator iterator = col.iterator();
// 使用 while 循环遍历
while (iterator.hasNext()) {// 判断是否还有元素
Object obj = iterator.next(); // 返回下一个元素,类型是 Object
System.out.println("obj = " + obj);
} // 当退出 while 循环后,iterator 迭代器指向最后一个元素
// 此时再调用 next() 会抛出 NoSuchElementException 异常
// iterator.next(); // 如果需要再次遍历,需要重制迭代器。
System.out.println("===第二次遍历===");
iterator = col.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
System.out.println("obj = " + obj);
}
}
}

当迭代器中不存在下一个元素时,直接调用 iterator.next() 方法会抛出 NoSuchElementException 异常,所以调用 iterator.next() 方法之前需要调用 iterator.hasNext() 方法。

增强 for 循环

增强 for 循环是简化版的 iterator,本质一样,只能用来遍历集合或数组。基本语法如下:

for(元素类型 元素名 : 集合名或数组名){
访问元素;
}
public class EnhancedFor() {
public static void main(String[] args) {
Collection collection = new ArrayList(); collection.add("mary");
collection.add(true);
collection.add(10); for (Object o : collection) {
System.out.println("o = " + o);
}
}
}

Collection 接口及其常用方法的更多相关文章

  1. 集合概述及Collection接口的常用方法

    java集合像是一种容器,可以动态的把多个对象的引用放到容器中 java的集合类可以用于存储数量不等的多个对象,还可以用于保存具有映射关系的关联数组 package com.aff.coll; imp ...

  2. Collection接口的常用方法

    [添加功能] boolean add(Object obj); //添加一个元素. boolean addAll(Collection c); //添加一个集合的元素(在后面追加). [删除功能] v ...

  3. java中集合类中Collection接口中的Set接口的常用方法熟悉

    1:Set集合由Set接口和Set接口的实现类组成,Set接口继承了Collection接口,因为包含Collection接口的所有方法. 2:由于Set接口中不允许存在重复值,因此可以使用Set集合 ...

  4. java中集合类中Collection接口中的List接口的常用方法熟悉

    1:集合类,在java语言中的java.util包提供了一些集合类,这些集合类又被称作容器. 2:区别集合类和数组.(1)数组的长度是固定的,集合的长度是可变的.(2)数组是用来存放基本数据类型的,集 ...

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

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

  6. Java基础——collection接口

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

  7. Java:concurrent包下面的Collection接口框架图( CopyOnWriteArraySet, CopyOnWriteArrayList,ConcurrentLinkedQueue,BlockingQueue)

    Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...

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

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

  9. Java精选笔记_集合概述(Collection接口、Collections工具类、Arrays工具类)

    集合概述 集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体.集合被用于存储.获取.操纵和传输聚合的数据. 使用集合的技巧 看到Array就是数组结构,有角标,查询速 ...

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

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

随机推荐

  1. 学习关于JavaScript常用的8大设计模式

    JavaScript 常用的8大设计模式有 工厂模式:工厂模式是一种创建对象的模式,可以通过一个共同的接口创建不同类型的对象,隐藏了对象的创建过程. 单例模式:单例模式是一种只允许实例化一次的对象模式 ...

  2. 三天吃透Redis八股文

    Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库.与传统数据库不同的是,Re ...

  3. 常用模块time模块

    时间模块: 一:time import time time的解析: 时间分为三种格式: 第一种: 第二种: 第三种: 二:datatime import datatime  #表达形式 print(d ...

  4. 企业应用可观测性利器!华为云CodeArts APM发布

    摘要:近日,华为云全链路应用性能管理服务CodeArts APM全新上线,提供端到端的全链路性能管理服务,涵盖前端监控.应用性能监控,全面拥抱开源生态. 本文分享自华为云社区<企业应用可观测性利 ...

  5. VUE3企业级项目基础框架搭建流程(2)

    typescript安装 这里使用的vue项目语言为:TypeScript,不了解的可以先去学习一下.TypeScript中文网 正常情况下安装typescript的命令为: // 全局安装 npm ...

  6. Spring的Factories机制介绍

    Java 的 SPI 机制 Java SpringBoot 加载 yml 配置文件中字典项 Spring的Factories就是Spring版本的Java Spi. Spring Factories的 ...

  7. Docker快速部署Hadoop环境

    文章目录 安装环境 安装过程 拉取镜像 在Docker中创建网络,方便通信 创建Master节点 创建slave1和slave2节点 分别进入三个容器修改hosts文件 在Master执行集群初始化 ...

  8. 记一次 .NET 某车零件MES系统 登录异常分析

    一:背景 1. 讲故事 这个案例有点特殊,以前dump分析都是和软件工程师打交道,这次和非业内人士交流,隔行如隔山,从指导dump怎么抓到问题解决,需要一个强大的耐心. 前几天有位朋友在微信上找到我, ...

  9. Pwn系列之Protostar靶场 Stack2题解

    (gdb) disass main Dump of assembler code for function main: 0x08048494 <main+0>: push ebp 0x08 ...

  10. SpringBoot定义优雅全局统一Restful API 响应框架四

    如果没有看前面几篇文章请先看前面几篇 SpringBoot定义优雅全局统一Restful API 响应框架 SpringBoot定义优雅全局统一Restful API 响应框架二 SpringBoot ...