Java的集合框架 深度学习笔记

第22章 Java的集合框架

描述Java集合框架的层次体系结构
使用Collection接口中定义的通用方法来操作规则集和线性表
使用Iterator接口来遍历一个集合
使用for-each循环简化对集合的遍历

探究如何使用,以及何时使用HastSet,LinkedHashSet或者TreeSet来存储元素

使用Comparable接口和Comparator接口来比较元素

探究如何使用,以及何时使用ArrayList或LinkedList来存储元素

使用Collections类中的静态工具方法来排序,查找和打乱线性表,以及找出集合中的最大元素和最小元素。

比较规则集和线性表的性能

区分VectorArrayList,然后使用Stack类来创建栈
探究Collection,Queue,LinkedLst以及PriorityQueue之间的关系,然后使用PriorityQueue类创建优先队列

区分Collection与Map,并描述何时及如何使用HashMap,LinkedHashMap和TreeMap来存储带键值的值

使用Collection类中的静态方法来获取单元素规则集,单元素线性表和单元素Map,以及不可变的规则集,不可变的线性表和不可变的Map

22.1 引言

除了ArrayListJava还提供了几个能更有效地组织和操作数据的数据结构。
这些数据结构(data structure)通常称为Java集合框架(Java Collections Framework)

在面向对象思想里,一种数据结构也被认为是一个容器(container),
它是一个存储数据或者元素的对象,有些人将数据结构称为(Container Object)
Java集合框架支持以下两种类型的容器

  • 一种是为了存储一个元素的集合,简称为集合(Collection)
  • 另一种视为了存储键/值对,称为图(map)

22.2 集合

Java集合框架支持三种主要类型的集合:规则集(Set),线性表(List)和队列(Queue)

  • Set的实例用于存储一组不重复的元素
  • List的实例用于存储一个由元素构成的有序集合
  • Queue的实例用于存储用先进先出方式处理的对象

22.3 Collection接口和AbstractCollection类

AbstractCollection类除了size方法和Iterator方法之外,实现了Collection接口中的所有方法。
size方法和Iterator方法在合适的子类中实现。
方法addAll,removeAll,retainAll类似于规则集上的并,差,交运算。

注意Collection接口中的有些方法是不能在具体子类中实现的。 在这种情况下,这些方法会抛出异常java.lang.UnsupportedOperationException, 他是RuntimeException异常类的一个子类。

22.4 规则集(Set)

Set接口扩展了Collection接口。它没有引入新的方法或者常量,只是规定Set的实例不能包含重复元素。
实现Set的具体类必须确保没有向这个规则集添加重复的元素。
也就是说一个规则集中,一定不存在元素e1,e2,使得 e1.equals(e2)的返回值为true

AbstractSet类是一个便利类,扩展了AbstractCollection类并实现了Set接口。
AbstractSet类提供了equals方法和hashCode方法的具体实现。

一个规则集的hashCode是这个规则集中所有元素的hashCode之和。

Set接口的三个具体类是HashSet,LinkedHashSet和树形集TreeSet

22.4.1 HashSet

可以使用无参构造函数来创建空的HashSet,也可以由一个现有的集合创建HashSet。
默认情况下,初始容量为16,而客座率是0.75
如果知道集合的大小,就可以在构造方法中指定初始容量和客座率。
客座率(load factor)当尺寸达到12(16*0.75)时,容量会翻倍到32。

22.4.2 LinkedHashSet

22.4.3 TreeSet

SoredSet -> NavigableSet -> TreeSet