在之前的文章我们介绍了一下 Java 中的日期操作,本章我们来看一下 Java 集合框架中的Collection。

早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。

虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。

集合框架被设计成要满足以下几个目标。

  • 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。

  • 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。

  • 对一个集合的扩展和适应必须是简单的。

为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedListHashSet, 和 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 从入门到进阶之路(二十一)的更多相关文章

  1. Java 从入门到进阶之路(十一)

    之前的文章我们介绍了一下 Java 中的继承,接下来我们继续看一下 Java 中的继承. 在有些时候,我们通过类继承的方式可以获取父类的方法,但是有些时候父类为我们提供的方法并不完全符合我们的需求,这 ...

  2. Java 从入门到进阶之路(二十)

    在之前的文章我们介绍了一下 Java 中的包装类,本章我们来看一下 Java 中的日期操作. 在我们日常编程中,日期使我们非常常用的一个操作,比如读写日期,输出日志等,那接下来我们就看一下 Java ...

  3. Java 从入门到进阶之路(二十三)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的迭代器 Iterator,本章我们来看一下 Java 集合框架中的Collection 的泛型. 在讲泛型之前我们先来 ...

  4. Java 从入门到进阶之路(二)

    之前的文章我们介绍了一下用 IDEA 编辑器创建一个 Java 项目并输出 HelloWorld,本章我们来看一下 Java 中的变量和基本数据类型. 在这之前我们先来看一下 Java 中的关键字,这 ...

  5. Java 从入门到进阶之路(十二)

    在之前的文章我们介绍了一下 Java 类的重写及与重载的区别,本章我们来看一下 Java 类的 private,static,final. 我们在之前引入 Java 类概念的时候是通过商场收银台来引入 ...

  6. Java 从入门到进阶之路(二十二)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 中的一些常用方法,本章我们来看一下 Java 集合框架中的Collection 的迭代器 Iterator. 当我们创建 ...

  7. Java 从入门到进阶之路(二十四)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的泛型,本章我们来看一下 Java 集合框架中的Collection 的子接口 List. Collection 接口有 ...

  8. Java 从入门到进阶之路(二十五)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的子接口 List的 增删改查和与数组间相互转换的方法,本章我们来看一下 Java 集合框架中的Collection 的 ...

  9. Java 从入门到进阶之路(二十六)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection 的子接口 List,本章我们来看一下 Java 集合框架中的Collection 的子接口 Queue. 在之前我们讲 ...

随机推荐

  1. 【codeforces 520B】Two Buttons

    [题目链接]:http://codeforces.com/contest/520/problem/B [题意] 给你一个数n; 对它进行乘2操作,或者是-1操作; 然后问你到达m需要的步骤数; [题解 ...

  2. get_magic_quotes_gpc() PHP转义的真正含义

    如何正确的理解PHP转 义是一个初学者比较困扰的问题.我们今天为大家简要的讲述了PHP转义的具体含义,希望有所帮助.PHP转义一直困扰着我, 今天认真的看了一下PHP手册, 终于解决了. 在PHP中默 ...

  3. Java Annotation详解(一): 理解和使用Annotation

    JDK1.5之后,引入了元数据的概念,也就是Annotation(注释),其实它是代码里的特殊标记,这些标记可以再编译.类加载.运行时被读取,并执行相应的处理. 元数据的作用: 如果要对于元数据的作用 ...

  4. Python--day71--分页功能

    分页功能代码: from django.shortcuts import render # Create your views here. from app01 import models def b ...

  5. joinColumns和inverseJoinColumns的用法

    最近在工作中使用springside,里面用到了hibernate的多对多 一开始我在配置department(部门表)和menu(栏目表)的时候,这样写的. Department实体类中的getMe ...

  6. ArrayList中remove方法和set(null)的区别

    在分析源码ArrayList.remove()时,偶然发现了一个疑惑的点,就是:源码也是将最后一个对象的引用指向null(源码:elementData[--size] = null; // clear ...

  7. H3C 通配符掩码

  8. Vue 项目构建完成 ----发布项目

    发布项目 cmd  命令行 npm run build      执行打包文件 完成后就会有  3 个文件夹    分别是: 文件夹 :build     config      dist    in ...

  9. 2018-2-13-win10-uwp-InkCanvas控件数据绑定

    title author date CreateTime categories win10 uwp InkCanvas控件数据绑定 lindexi 2018-2-13 17:23:3 +0800 20 ...

  10. ZR7.26

    7.26 A 并查集维护,时间复杂度我写的貌似不大对,先鸽一鸽 B 敦爷:\(w\)是这个区间的最大值当且仅当他是这个区间内最大的 我们发现结合昨天课件内的并查集 发现我们每次不断合并的本质是把所有\ ...