1.Collection接口通常不被直接使用。但是Collection接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作,因为List接口和Set接口都实现了Collection接口,所以这些方法对List集合和Set集合时通用的。

  创建一个集合类可以这样定义:

Collection<String> list_1 = new ArrayList<>();

  由于Java中不能对接口进行实例化,而Collection接口的子接口是List接口,ArrayList类实现了List接口,所以可以通过ArrayList类实例化并声明为Collection类型。

  2.Collection接口定义的常用方法

  

  (1)addAll(Collection<? extends E> col)方法:用来将指定集合中的所有对象添加到该集合中。如果对该集合进行了泛化,则要求指定集合中的所有对象都符合泛化类型,否则在编译程序时将抛出异常,其中E为用来泛化的类型。

package collection.jun.iplab;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class MethodTest_addAdd { public static void main(String[] args) { String a = "A";
String b = "B";
String c = "C"; Collection<String> list_1 = new ArrayList<>();
list_1.add(a);
list_1.add(b); Collection<String> list_2 = new ArrayList<>();
// 由于list_1中的对象类型都是String, 同时list_2的泛型定义为String, 才可以使用这个方法。
list_2.addAll(list_1);
list_2.add(c); Iterator<String> it_1 = list_1.iterator();
while (it_1.hasNext()) {
String str = (String) it_1.next();
System.out.print(str + " ");
} System.out.println(); Iterator<String> it_2 = list_2.iterator();
while (it_2.hasNext()) {
String str = (String) it_2.next();
System.out.print(str + " ");
}
}
} 输出:
A B
A B C

  (2)removeAll(Collection<? col)方法:用来从集合中移除同时包含在指定集合中的对象,与retainAll()方法正好相反。如果存在符合移除条件的对象则返回true,否则返回false。

package collection.jun.iplab;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class MethodTest_removeAll { public static void main(String[] args) { String a = "A";
String b = "B";
String c = "C"; Collection<String> list_1 = new ArrayList<>();
list_1.add(a);
list_1.add(b); Collection<String> list_2 = new ArrayList<>();
list_2.add(a);
list_2.add(b); Collection<String> list_3 = new ArrayList<>();
list_3.add(b);
list_3.add(c); Collection<String> list_4 = new ArrayList<>();
list_4.add(c); boolean isContain_1_3 = list_1.removeAll(list_3);
System.out.print(isContain_1_3 + " "); Iterator<String> it_1 = list_1.iterator();
while (it_1.hasNext()) {
String str = (String) it_1.next();
System.out.print(str + " ");
} System.out.println(); boolean isContain_2_4 = list_2.removeAll(list_4);
System.out.print(isContain_2_4 + " "); Iterator<String> it_2 = list_2.iterator();
while (it_2.hasNext()) {
String str = (String) it_2.next();
System.out.print(str + " ");
} }
} 输出:
true A
false A B

  (3)retainAll(Collection<? col)方法:仅保留该集合中同时包含在指定集合中的对象,其他的全部移除,与removeAll()方法正好相反。如果存在符合移除条件的对象则返回true,否则返回false。

package collection.jun.iplab;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class MethodTest_retainAll { public static void main(String[] args) { String a = "A";
String b = "B";
String c = "C"; Collection<String> list_1 = new ArrayList<>();
list_1.add(a);
list_1.add(b); Collection<String> list_2 = new ArrayList<>();
list_2.add(b); Collection<String> list_3 = new ArrayList<>();
list_3.add(b);
list_3.add(c); // list_1中的b为list_3中也有的对象,所以仅保留b,返回true
boolean isContain_1_3 = list_1.retainAll(list_3);
System.out.print(isContain_1_3 + " "); Iterator<String> it_1 = list_1.iterator();
while (it_1.hasNext()) {
String str = (String) it_1.next();
System.out.print(str + " ");
} System.out.println(); // list_3中的c为list_2中没有的对象,所以返回false,不移除数据。
boolean isContain_2_3 = list_2.retainAll(list_3);
System.out.print(isContain_2_3 + " "); Iterator<String> it_2 = list_2.iterator();
while (it_2.hasNext()) {
String str = (String) it_2.next();
System.out.print(str + " ");
} }
} 输出:
true B
false B

  (4)containAll()方法:查看在该集合中是否存在指定集合中的所有对象。如果存在则返回true,否则返回false。

package collection.jun.iplab;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class MethodTest_containAll { public static void main(String[] args) { String a = "A";
String b = "B";
String c = "C"; Collection<String> list_1 = new ArrayList<>();
list_1.add(a);
list_1.add(b); Collection<String> list_2 = new ArrayList<>();
list_2.add(b); Collection<String> list_3 = new ArrayList<>();
list_3.add(b);
list_3.add(c); boolean isContain_1_2 = list_1.containsAll(list_2);
System.out.print(isContain_1_2 + " "); System.out.println(); boolean isContain_1_3 = list_1.containsAll(list_3);
System.out.print(isContain_1_3 + " "); }
} 输出:
true
false

  (5)toArray(T[] t)方法:用来获得一个包含所有对象的指定类型的数组。

package collection.jun.iplab;

import java.util.ArrayList;
import java.util.Collection; public class MethodTest_toArray { public static void main(String[] args) { String a = "A";
String b = "B";
String c = "C"; Collection<String> list = new ArrayList<>();
list.add(a);
list.add(b);
list.add(c); // 创建一个String类型的数组对象的实例
String[] strs = new String[1];
// 将数组类型的实例传递进来,用来指定想要获得的数组的类型为String
String[] strs_2 = list.toArray(strs); for (String string : strs) {
System.out.print(string + " ");
} System.out.println(); for (int i = 0; i < strs_2.length; i++) {
String string = strs_2[i];
System.out.print(string + " ");
} }
} 输出:
null
A B C

  

Java基础(二十)集合(2)Collection接口的更多相关文章

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

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

  2. 夯实Java基础(十)——抽象类和接口

    转载自:http://cmsblogs.com/ 该博主的网站上干货非常!非常!非常多(说三遍),强烈推荐大家前去学习. 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法 抽象类与接口是 ...

  3. 夯实Java基础(二十五)——JDBC使用详解

    1.JDBC介绍 JDBC的全称是Java Data Base Connectivity(Java数据库连接).是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问(例如MyS ...

  4. Java笔记(二十二)……Collection集合

    概述 为什么会出现集合类 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式 数组和集合类同是容器,有何不同 数组虽然也可以存储 ...

  5. Java从零开始学二十(集合简介)

    一.为什么需要集合框架 数组的长度是固定的,但是如果写程序时并不知道程序运行时会需要多少对象.或者需要更复杂的方式存储对象,---那么,可以使用JAVA集合框架,来解决这类问题 二.集合框架主要接口 ...

  6. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...

  7. “全栈2019”Java第八十九章:接口中能定义内部类吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. “全栈2019”Java第六十五章:接口与默认方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. “全栈2019”Java第六十四章:接口与静态方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. C#控件及常用属性

    1.窗体(Form) 1.常用属性 (1)Name 属性:用来获取或设置窗体的名称,在应用程序中可通过Name 属性来引用窗体. (2) WindowState 属性: 用来获取或设置窗体的窗口状态. ...

  2. Save&Load--Unity存档读档的学习总结

    存档与读档功能 举例: 传统RPG游戏(仙剑.空之轨迹): 1.角色信息(生命值,等级) 2.道具信息(装备,药品) 3.场景信息(场景名称.角色坐标) 4.事件信息(任务相关) 关卡类游戏:关卡的通 ...

  3. 利用threading模块开线程

    一多线程的概念介绍 threading模块介绍 threading模块和multiprocessing模块在使用层面,有很大的相似性. 二.开启多线程的两种方式 1.创建线程的开销比创建进程的开销小, ...

  4. Maven中jar包冲突的解决方式

    现象 创建一个maven工程,引入spring-context包. <dependency> <groupId>org.springframework</groupId& ...

  5. Mysql高手系列 - 第20篇:异常捕获及处理详解(实战经验)

    Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 这是Mysql系列第20篇. 环境:mysql5.7.25,cmd命令中进行演示. 代码中被[]包含的表示可选,|符 ...

  6. Kotlin编译时注解,简单实现ButterKnife

    ButterKnife在之前的Android开发中还是比较热门的工具,帮助Android开发者减少代码编写,而且看起来更加的舒适,于是简单实现一下ButterKnife,相信把下面的代码都搞懂,看Bu ...

  7. MySQL-时区导致的时间前后端不一致

    背景 今天早上刚上班,就被同事提示,程序的日期处理有问题.数据库里日期为:2019-05-21 11:00:00 而前端显示的日期为:2019-05-21 16:00:00 分析 那肯定是和时区相关了 ...

  8. FreeRTOS优化与错误排查方法

    写在前面 主要是为刚接触 FreeRTOS 的用户指出那些新手通常容易遇到的问题.这里把最主要的篇幅放在栈溢出以及栈溢出j检测上,因为栈相关的问题是初学者遇到最多的问题. printf-stdarg. ...

  9. NOIP2011计算系数;

    #include<cmath> #include<algorithm> #include<stdio.h> #include<iostream> #de ...

  10. C#学习--SQL server数据库基本操作(连接、增、删、改、查)封装

    写在前面: 在日常的工作中,通常一个项目会大量用的数据库的各种基本操作,因此小编几个常见的数据库的操作封装成了一个dll方便后续的开发使用.SQLserver数据库是最为常见的一种数据库,本文则主要是 ...