第20章 Java类集框架
Java的类集框架可以使程序处理对象的方法标准化,类集接口是构造类集框架的基础,使用迭代方法访问类集可以使对类集的操作更高效。
本章要点:
掌握类集接口的概念;
掌握List接口、集合接口和SortedSet接口;
熟悉Collection接口中的ArrayList类、HashSet类和TreeSet类的方法;
了解通过迭代方法访问类集;
20.1 认识类集框架
在基础应用中,通常我们可以通过数组来保存一组具有相同属性的对象或者基本数据类型,但使用数组的弊端在于其大小是不可更改的,因此出于灵活性的考虑,可以使用链表来实现动态的数组。任何事情都有两面性,灵活性的代价就是操作上的繁琐。在计算机世界里,处理繁琐问题的常用方法就是将其封装,只向外提供可调用的方法视图。Java类集框架就是对这一方法的一种官方实现一套动态对象数组的操作类。本质上,Java类集框架就是Java对数据结构的一个大体上的封装。
类集的内部实现原理依然和之前一样,就是一个动态的对象数组,所不同的是,这个动态数组处理的细节,已被包装屏蔽起来了。
在java.util包之中定义了所有与类集有关的操作接口:Collection、List、Set、Map、Iterator、ListIterator及Enumeration。
在Java中,每个变量都有其所属的数据类型,要么是基本的数据类型,要么是自定义的数据类型-类,而泛型的本质就是将变量的“类型”参数化,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别被称为泛型类、泛型接口、泛型方法。
常用方法:
.toArray():将类集转换成一个普通数组;
Arrays.asList():将数组转换成一个类集;
Arrays.sort():升序排序数组;
Arrays.binarySearch(arrInt,search):利用二分查找法查找指定的整数;
Arrays.toString():类集可以直接打印,但是数组直接打印是一个地址,必须用Arrays.toString()处理,结果和直接打印对象相同。
20.2 类集接口
1、类集框架定义了几个接口,支持类集的接口总结在下表中:
a、Collection:能操作一组对象,它位于类集层次结构的顶层;
b、List:扩展Collection支持处理序列,有序,可以重复;
ArrayList类:数组结构,查询效率高,修改效率差;
LinkedList类:链式结构,查询效率低,修改效率高;
vector:安全的,支持同步;
c、Set:扩展Collection支持处理集合,无序,集合元素必须唯一;
HashSet
TreeSet:将存入的元素自然排序
SortedSet:扩展Set支持处理排序集合。
2、数组操作类:Arrays
3、比较器:
Comparable:compareTo接口
Comparator:compare接口
4、不允许重复的子接口:set
5、类集的输出:
迭代器
Iterator
ListIterator
Enumerator:vector
for(for-each输出)
6、偶对数保存接口:Map
Map是由键值对组成(Map.Entry),其中的键是一个Set集合;
接口:
Map接口
Map.Entry接口
SortedMap
实现类:
HashMap类
TreeMap类
HashTable
Map集合的输出
7、前期版本留下的类和接口:
Stack:先进先出
Dictionary:表示键值对存储库的抽象类
Properties:属性值的键值对集合
8、Collections类:
操作Collection集合的工具类
9、Java8的泛型
除了类集接口外,类集也需要使用Comparator、Iterator和Listlterator等接口。
在这些接口中定义了操作该类集的一些方法。支持这些方法的类集被称为可修改的,不允许修改其内容的类集被称为不可修改的。而所有内置的类集都是可以修改的。如果对一个不可修改的类集使用这些方法,将引发一个UnsupportedOperationException异常。
20.3 单值保存的最大父接口-Collection
Collection接口是构造类集框架的基础,是单值数据操作的最大父接口,它申明了所有类集都将拥有的核心方法。所有类集均实现了Collection。
boolean add(Object obj);
boolean addAll(Collection c);
void clear();
boolean contains(Object obj);
boolean containsAll(Contain c);
boolean equals(Object obj);
int hashCode();
boolean isEmpty();
概括:
1、数组的增删改查、排序、遍历;
2、Collection的增删改查、排序、遍历;
3、Map的增删改查、排序、遍历;
4、数组和Collection相互转化;
数组和类集比较:
| 数组 | 类集 |
打印输出 | System.out.println(Arrays.toString(X)) | System.out.println(X) |
排序 | Arrays.sort() | Collections.sort()/Collections.reverse() |
元素类型 | 基本类型 | 引用类型 |
获取元素方式 | 数组[i] | 类集.get(i) |
遍历方式 | for() | for()/Iterator/ListIterator/Enumeration |
内容比较 | Comparable(compareTo)/Comparator(compare) | Comparable(compareTo)/Comparator(compare) |