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. 在之前我们讲 ...
随机推荐
- 学习canvas画布
我们可以用画布(Canvas)绘制各种图形,下面代码是绘制的一个圆形: <!DOCTYPE html> <html> <head> <title>Can ...
- 快速理解bootstrap,bagging,boosting,gradient boost-三个概念
1 booststraping:意思是依靠你自己的资源,称为自助法,它是一种有放回的抽样方法,它是非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法. 其核心思想和基本步骤如下: (1 ...
- [转]React入门看这篇就够了
摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...
- laravel的Eloquent关联关系
1.简介: 1>Eloquent 关联关系以Eloquent模型类方法的形式被定义(是模型类的一个方法). 2>同 Eloquent 模型本身一样,关联关系也是强大的查询构建器,定义关联关 ...
- java Set接口(元素不可以重复)
Set是Collection子接口: Set和Collection基本上一样,一点除外: Set无法记住添加的顺序,不允许包含重复的元素. 当试图添加两个相同元素进Set集合,添加操作失败,add() ...
- 【t085】Sramoc问题
Time Limit: 1 second Memory Limit: 128 MB [问题描述] Sramoc(K,M)表示用数字0,1,2,...,K-1组成的自然数中能被M整除的最小数.给定K,M ...
- [转]WebApi 后端文件传输至远程服务器
/* 功能说明:微信退款需要有数字证书,而我们公司是做小程序平台的,会帮商家自动退款,所以会要求商家把微信证书上传至我们服务器,以便 微信退款. 使用HttpPostedFile 接受前端上传的文件, ...
- python模块之序列化模块
序列化 """ 序列--字符串 序列化--其他数据类型转化为字符串数据类型 反序列化--字符串转化为其他数据类型 """ json模块 &q ...
- Fast Stone截图工具使用教程
下面是Fast Stone的显示面板,很小巧,但功能强大 一.特殊功能 1.1 添加水印 (1)选择功能栏的"Edge" (2)将要水印的图片选中,选择水印图片的放置位置,应用即可 ...
- 一图理解vue生命周期
博客园上传图不太清晰,可以查看我的CSDN https://blog.csdn.net/jiaoshuaiai/article/details/90046736 感谢: https://segment ...