【Java精品源码栏目提醒】:网学会员--在 Java精品源码编辑为广大网友搜集整理了:Java程序设计 第08章 集合类与泛型程序设计 - 人力资源绩等信息,祝愿广大网友取得需要的信息,参考学习。
第8章集合类与泛型程序 设计 8.1
Java中的集合类结构
Java提供了集合类Collection及其API,于是用户可以通过统一的操作接口,使得从一种数据结构到另一种数据结构的转换极为方便,简化了程序员编程时的负担。
任何集合框架包括三部分内容:对外的接口、接口的实现和对集合运算的算法。
集合API的根是一个集合接口,存放于
java.util包中。
Collection接口定义了所有属于集合的类都应该具有的通用方法。
8.1
Java中的集合类结构
Java集合框架结构由两颗接口树构成:第一棵树根节点为Collection接口,它定义了所有集合的基本操作,如添加、删除、遍历等。
它的子接口Set、List等则提供了更加特殊的功能。
第二棵树根节点为Map接口。
与哈希表类似,保持的是键值对的集合,可以通过键来实现对值元素的快速访问。
Collection接口 Collection Set ListSortedSet AbstractSet AbstractListTreeSet HashSet ArrayList Vector AbstractSequentialList Stack LinkedList Map接口 Map AbstractMapTreeMap HashtMap WeakHashMap 8.2 Collection接口方法名 功能说明boolean addObject o 插入单个对象boolean addAllCollection c 添加另外一个集合对象c中的所有对象Object toArray 以数组的形式返回内容Object toArrayObject a 以数组的形式返回内容Iterator iterator 返回一个实现了Iterator接口的对象void clear 清空所有对象boolean removeObject o 删除指定的对象boolean ramoveAllCollection c 删除c中所拥有的对象boolean retainAllCollection c 保留指定的对象boolean containsObject o 检查是否包含有指定的对象boolean containsAllCollection c 检查是否包含c中所包含的对象boolean isEmpty 判断集合是否为空int size 获取集合中的对象个数 8.3 Set接口 Set接口是一种不包含重复元素的Collection的 子接口。
Set接口中并没有引入新方法,它提供 的基本方法和Collection接口类似。
Set接口派生了一个SortedSet接口和一个抽象 类AbstractSet。
SortedSet接口用来描述有序的 元素集合,TreeSet实现了这个接口,它将放入 其中的元素按序存放,要求其中的对象是可排 序的。
抽象类AbstractSet实现了部分 Collection接口,并有一个子类HashSet,它以 散列方式表示集合内容。
HashSet类 HashSet类是实现了Set接口的标准类,它创建了一个使用哈希表存储的集合,能快速定位一个元素,从而可以优化查询的速度,特别是在查找大集合时HashSet类比较有用。
HashSet的构造函数如下:HashSet:创建一个空的哈希集。
HashSetCollection c:创建一个哈希集,并且将集合 c中所有元素添加进去。
HashSetint initialCapacity:创建一个拥有特定容量 的空哈希集。
HashSetint initialCapacity,float loadFactor:创建 一个拥有特定容量和加载因子的空哈希集。
loadFactor是0.01.0之间的一个数,通 常默认为0.75。
加载因子定义了哈希集 合充满什么程度时就要增加容量。
即当 元素的数目大于哈希集容量和加载因子 之积时,哈希集容量将扩展。
8.4 List接口 List接口是包含有序元素的一种Collection子接 口,其中的元素必须按序存放。
元素之间的顺 序关系可以由插入的时间先后决定,也可以由 元素值的大小决定。
List接口使用类似于数组下标的索引的概念表示 元素在List 中的位置。
用户能够使用索引来访问 List 中的元素。
索引从0开始。
为了保持元素的 有序的特性,List接口新增加了大量的方法,使 之能够在序列中间根据具体位置添加和删除元 素。
List接口的主要方法方法名 功能说明void addint indexObject element 在指定位置上添加一个对象boolean addAllint indexCollection c 将c中的所有对象添加到指定位置ListIterator listIterator 返回一个ListIteratorListIterator listIteratorint index 返回指定的ListIteratorObject getint index 返回指定位置的对象Object removeint index 删除指定位置的对象Object setint indexobject element 用元素element取代位置index上的元 素返回被取代的元素int indexOfobject o 返回第一个匹配对象的位置int lastIndexOfobject o 返回最后一个匹配对象的索引 8.4.1 LinkedList 类 LinkedList类提供了使用双向链表实现数据存储的方法,可按序号检索数据,并能够进行向前或向后遍历。
由于插入数据时只需要记录元素的前后项即可,所以插入数度较快,因此适合于在链表中间需要频繁进行插入和删除的操作。
Linkedlist接口的主要方法方法名 功能说明public boolean addObject element 向链表末尾添加一个新的结点public boolean addint index, 将对象o添加到链表中由index指定 Object o 位置public boolean addFirstObject o 将对象o添加到链表的头部public boolean addLastObject o 将对象向o添加到链表的末尾public boolean clear 删除链表的所有节点,成为空链表public Object removeint index 删除指定位置上的结点public Object removeObject o 删除首次出现含有o的结点public Object get int index 返回链表中index位置处的结点对象 8.4.2 ArrayList 类 ArrayList类是List接口的一个可变长数组的实现,即一个ArrayList类对象可以动态改变大小。
每个ArrayList类对象都有一个容量Capacity,用于存储元素的数组的大小。
容量可随着不断添加新元素而自动增加。
序列以初始长度创建,当长度超过时,集合自动变大;当删除对象时,集合自动变小。
集合中允许存储null值。
ArrayList类的随机访问速度快,但是向表中插入和删除比较慢。
当需要插入大量元素时,在插入前可以调用ensureCapacity 方法来增加ArrayList 的容量以提高插入效率。
8.4.2 ArrayList 类ArrayList常用的构造函数如下:ArrayList :构建一个空的ArrayList对象。
ArrayList Collection c:构建一个ArrayList对象 ,并且将集合c中所有元素添加进去。
ArrayList int initialCapacity:构建一个拥有特 定容量的空ArrayList对象。
ArrayList的很多成员方法与LinkedList相似,两 者的本质区别是一个使用顺序结构,另一个使用 链表结构,因此,它也可以使用LinkedList类提 供的方法进行列表的操作。
8.5 Iterator接口 除了使用集合对象的get方法可以实现对集合中的元素的遍历外。
利用迭代器Iterator也可以实现元素遍历。
迭代器是一个实现了Iterator接口或者ListIterator接口的对象。
ListIterator继承了Iterator,可以进行双向遍历以及元素的修改。
Iterator接口的主要方法方法名 功能说明boolean hasNext 判断是否还有其他元素Object next 获取下一个元素void remove 删除最后一次调用next方法 返回的元素Set keySet 返回Set类型的接口 Iterator迭代器只能前向循环,如果需要双向遍历,则可以使用更高级的ListIterator迭代器,ListIterator接口继承自Iterator接口。
ListIterator迭代器除了有next方法外,还新增了hasprevious方法和previous方法,实现前向遍历。
ListIterator还可以定位当前的索引位置,调用nextIndex和previousIndex就可以实现。
ListIterator接口的主要方法方法名 功能说明void addObject o 插入新的对象void setObject o 修改最后一次调用next方法返回的元素void remove 删除最后一次调用next方法返回的元素boolean hasPrevious 判断前面是否还有元素Object previous 获取前一个对象int nextIndex 获取下一个元素的索引值int previousIndex 获取上一个元素的索引值 8.6 Map及HashMap接口1. Map 接口 Map中每项都是成对出现的,它提供了一组键 值的映射。
其中存储的每个对象都有一个相应 的关键字key,关键字决定了对象在Map中的 存储位置。
关键字应该是唯一的,每个key 只 能映射一个value。
用putObject key,Object value方法即可将一 个键与一个值对象相关联。
用getObject key 可得到与此key对象所对应的值对象。