Java详解

1年前 (2024-04-27)
在编程时,可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的。如果需要保存数量变化的数据,数组就有点无能为力了。而且数组无法保存具有映射关系的数据,如成绩表为语文——79,数学——80,这种数据看上去像两个数组,但这两个数组的元素之间有一定的关联关系。

为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),Java 提供了类。类主要负责保存、盛装其他数据,因此类也被称为容器类。Java 所有的类都位于 java.util 包下,提供了一个表示和操作对象的统一构架,包含大量接口,以及这些接口的实现类和操作它们的算法。

类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为里保存的是对象)。

Java 类型分为 Collection 和 Map,它们是 Java 的根接口,这两个接口又包含了一些子接口或实现类。图 1 和图 2 分别为 Collection 和 Map 的子接口及其实现类。
Collection接口结构

图 1  Collection接口基本结构

Map接口结构

图 2  Map接口基本结构


在 图 1 和图 2 中,块为的接口,蓝色块为的实现类。表 1 介绍了这些接口的作用。

表 1 Java接口的作用

接口名称

作    用

Iterator 接口

的输出接口,主要用于遍历输出(即迭代访问)Collection 中的元素,Iterator 对象被称之为迭代器。迭代器接口是接口的父接口,实现类实现 Collection 时就必须实现 Iterator 接口。

Collection 接口

是 List、Set 和 Queue 的父接口,是存放一组单值的接口。所谓的单值是指中的每个元素都是一个对象。一般很少直接使用此接口直接操作。

Queue 接口

Queue 是 Java 提供的队列实现,有点类似于 List。

Dueue 接口

是 Queue 的一个子接口,为双向队列。

List 接口

是最常用的接口。是有序,允许有相同的元素。使用 List 能够精确地控制每个元素插入的位置,用户能够使用索引(元素在 List 中的位置,类似于数组下标)来访问 List 中的元素,与数组类似。

Set 接口

不能包含重复的元素。

Map 接口

是存放一对值的接口,即接口中的每个元素都是一对,以 key➡value 的形式保存。


对于 Set、List、Queue 和 Map 这 4 种,Java 最常用的实现类分别是 HashSet、TreeSet、ArrayList、ArrayDueue、LinkedList 和 HashMap、TreeMap 等。表 2 介绍了中这些常用的实现类。

表 2 Java实现类的作用

类名称

作用

HashSet

为优化査询速度而设计的 Set。它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,实现比较简单

TreeSet

实现了 Set 接口,是一个有序的 Set,这样就能从 Set 里面提取一个有序序列

ArrayList

一个用数组实现的 List,能进行快速的随机访问,效率高而且实现了可变大小的数组

ArrayDueue

是一个基于数组实现的双端队列,按“先进先出”的方式操作元素

LinkedList

对顺序访问进行了优化,但随机访问的速度相对较慢。此外它还有 addFirst()、addLast()、getFirst()、getLast()、removeFirst() 和 removeLast() 等方法,能把它当成栈(Stack)或队列(Queue)来用

HsahMap

按哈希算法来存取键对象

TreeMap

可以对键对象进行排序