Java 从入门到进阶之路(二十一)
在之前的文章我们介绍了一下 Java 中的日期操作,本章我们来看一下 Java 集合框架中的Collection。
早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。
虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。
集合框架被设计成要满足以下几个目标。
该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
对一个集合的扩展和适应必须是简单的。
为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。

从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:
接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
除了集合,该框架也定义了几个 Map 接口和类。Map 里存储的是键/值对。尽管 Map 不是集合,但是它们完全整合在集合中。
集合框架体系如图所示

声明:以上内容节选自菜鸟教程,觉得总结的非常不错就直接拿过来用了,通俗易懂。
接下来我们就用代码来实现一下 Collection 的一些基本操作,在之前的文章我们想要创建一个数组之前必须先定义好类型和数组的长度,然后填充数组,如果数组长度要增加或减少时需要扩容或减容,代码如下:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
// int[] arr = {1, 2, 3}; // 这种方法也可以创建数组
for (int i = 0; i < arr.length; i++) {
// 输出 arr1 数组值
System.out.println(arr[i]); // 1 2 3
}
// arr 源数组 arr.length+1 扩容数组长度
arr = Arrays.copyOf(arr, arr.length + 1);
for (int i : arr) {
System.out.println(i); // 1 2 3 0
}
}
}
从上面的代码中可以看出,创建一个数组并且对数组进行操作还是很麻烦的,那我们通过 Collection 进行操作呢?如下:
import java.util.ArrayList;
import java.util.Collection; /**
* java.util.Collection 包
* 集合,用于存储一组元素,提供了维护集合的相关操作
* 其派生了两个子接口:
* List:可重复集
* Set:不可重复集
* 元素是否重复是依靠元素资深 equals 方法比较的结果而定的
*/
public class Main {
public static void main(String[] args) {
/**
* boolean add(E e)
* 向集合中添加元素
* 当元素成功添加到集合后返回 true
*/
Collection collection = new ArrayList();
collection.add(0);
// collection.add("one"); 可以添加成功,但不建议添加不同类型的数据,避免取出时造成麻烦
collection.add(1);
collection.add(2);
System.out.println(collection); // [0, 1, 2] /**
* int size()
* 返回当前集合的元素个数
* */
System.out.println(collection.size()); // /**
* boolean isEmpty()
* 判断当前集合是否含有任何元素
* 空集合
* */
System.out.println(collection.isEmpty()); // false /**
* boolean contains(E e)
* 判断当前集合是否包含给顶元素
* */
System.out.println(collection.contains(1)); // true /**
* boolean remove(E e)
* 从集合中删除指定元素,删除成功返回 true
* 值删除集合中第一个与给定元素 equals 比较为 true 的元素
* */
collection.add(1);
System.out.println(collection.remove(1)); // true
System.out.println(collection); // [0, 2, 1]
System.out.println(collection.remove(1)); // true
System.out.println(collection); // [0, 2] /**
* void clear()
* 清空集合
* */
collection.clear();
System.out.println(collection.size()); //
System.out.println(collection.isEmpty()); // true
}
}
在上面的代码中,我们实现了 Collection 的一些基本用法,但是都是对 Collection 中的元素进行单体操作,当然 Collection 还有一些整体多元素操作,如下:
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet; /**
* java.util.Collection 包
* 集合,用于存储一组元素,提供了维护集合的相关操作
* 其派生了两个子接口:
* List:可重复集
* Set:不可重复集
* 元素是否重复是依靠元素资深 equals 方法比较的结果而定的
*/
public class Main {
public static void main(String[] args) {
Collection collection1 = new ArrayList();
collection1.add("one");
collection1.add("two");
collection1.add("three");
collection1.add("four");
System.out.println(collection1); // [one, two, three, four] Collection collection2 = new HashSet(); // set 集合内不能有重复元素,且为无序
collection2.add("one");
collection2.add("two");
collection2.add("three");
System.out.println(collection2); // [one, two, three] /**
* 取并集
* boolean addAll(Collection c)
* 将给定集合中的所有元素添加到当前集合中
* 添加后只要当前集合元素数量发生了变化,则返回 true
* */
System.out.println(collection1.addAll(collection2)); // true
System.out.println(collection1); // [one, two, three, four, one, two, three]
System.out.println(collection2.addAll(collection1)); // true
System.out.println(collection2); // [four, one, two, three] /**
* boolean containsAll(Collection c)
* 判断当前集合是否包含给定集合中的所有元素
* */
System.out.println(collection1.containsAll(collection2)); // true /**
* boolean containsAll(Collection c)
* 从当前集合中删除两个集合中共有的元素
* */
System.out.println(collection2.removeAll(collection1)); // true
System.out.println(collection2); // []
}
}
Java 从入门到进阶之路(二十一)的更多相关文章
- Java 从入门到进阶之路(十一)
之前的文章我们介绍了一下 Java 中的继承,接下来我们继续看一下 Java 中的继承. 在有些时候,我们通过类继承的方式可以获取父类的方法,但是有些时候父类为我们提供的方法并不完全符合我们的需求,这 ...
- Java 从入门到进阶之路(二十)
在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...
- Java 从入门到进阶之路(二十三)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection 的迭代器 Iterator,本章我们来看一下 Java 集合框架中的Collection 的泛型. 在讲泛型之前我们先来 ...
- Java 从入门到进阶之路(二)
之前的文章我们介绍了一下用 IDEA 编辑器创建一个 Java 项目并输出 HelloWorld,本章我们来看一下 Java 中的变量和基本数据类型. 在这之前我们先来看一下 Java 中的关键字,这 ...
- Java 从入门到进阶之路(十二)
在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入 ...
- Java 从入门到进阶之路(二十二)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection 中的一些常用方法,本章我们来看一下 Java 集合框架中的Collection 的迭代器 Iterator. 当我们创建 ...
- Java 从入门到进阶之路(二十四)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection 的泛型,本章我们来看一下 Java 集合框架中的Collection 的子接口 List. Collection 接口有 ...
- Java 从入门到进阶之路(二十五)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection 的子接口 List的 增删改查和与数组间相互转换的方法,本章我们来看一下 Java 集合框架中的Collection 的 ...
- Java 从入门到进阶之路(二十六)
在之前的文章我们介绍了一下 Java 中的 集合框架中的Collection 的子接口 List,本章我们来看一下 Java 集合框架中的Collection 的子接口 Queue. 在之前我们讲 ...
随机推荐
- laravel 授权使用gate门类
第一:先注册 第二:使用方式三种 路由中:Route::group(['middleware'=>'can:system'],function() {}) 模板中:@can("syst ...
- 使用openssl 工具进行双向认证测试
1,双向认证测试(需要根证书,客户证书,服务器证书以及各自的私钥)(验证通信双方的身份) openssl s_server -accept -key certs/server.key -cert ce ...
- JavaScript中判断整数的方法
一.使用取余运算符判断 任何整数都会被1整除,即余数是0.利用这个规则来判断是否是整数. 1 2 3 4 5 function isInteger(obj) { return obj%1 == ...
- css超出盒子隐藏
效果如图1-1. 效果图1-1 css代码: white-space: nowrap;overflow: hidden; text-overflow: ellipsis; display: inlin ...
- 在CentOS7上安装ftp服务器用于保存服务端上传的图片。
1.CentOS卸载vsftpd的方法 如果服务器上已经安装了vsftpd服务,配置出错需要卸载vsftpd服务. 1.1 查找vsftpd服务 [root@localhost /]# rpm -aq ...
- dell装系统
Dell f2进入bios USB support改为enable Uefi 改为legacy F12可看到USB
- SpringBoot集成thymeleaf(自定义)模板中文乱码的解决办法
楼主今天在学习SpringBoot集成thymelaf的时候报了中文乱码的错误,经过网上的搜索,现在得到解决的办法,分享给大家: package com.imooc.config; import or ...
- SourceYard 制作源代码包
本文带大家走进SourceYard开发之旅 在项目开发中,将一个大的项目拆为多个小项目解耦,减少模块之间的耦合.因为如果将代码放在一起,即使有团队的约束,但只要能写出的代码就会有小伙伴写出,很快就发现 ...
- JavaScript数据类型总结
1. 六种简单数据类型:Undefined.Null.Boolean.Number.String.Symbol(新增): 一种复杂数据类型:Object: (1)基本数据类型保存在栈内存中,是按值传 ...
- VC++ CMsflexgrid 使用
引用actvie x :microsoft CMsflexgrid; BOOL CCalibrationCoordsDisDlg::OnInitDialog() { CDialog::OnInitDi ...