Java 编程思想 - 第十一章 持有对象

第十一章 持有对象

  • Java提供了一套相当完整的容器类来解决程序在运行期间才知道的某些条件从而创建新对象的问题。

1.基本概念

  • Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念:1). Collection,一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入顺序保存元素,Set不能有重复元素,Queue按照排队规则来确定对象产生的顺序。2). Map,一组“键值对”对象,允许使用键查找值。
  • Collection容器中包括List、Set、Queue,List中包括ArrayList、LinkedList,Set中包括HashSet,TreeSet。
  • Map容器中包括HashMap、TreeMap。

2.List

2.1 ArrayList

  • 擅长于随机访问元素,但对插入元素和移除元素较慢。

2.2 LinkedList

  • 擅长进行插入与删除元素,提供了优化的顺序访问。但是在随机访问方面相对较慢。

3.迭代器

  • 迭代器的工作是遍历并选择序列中的对象,并且容器类都可以使用迭代器。(单向移动)
    1).根据容器类的iterator()方法获得Iterator对象,Iterator对象将准备好返回序列的第一个元素。
    2).使用next()方法获取序列中的下一个元素。
    3).使用hasNext()方法检查序列中是否还有下一个元素。
    4).使用remove()方法将迭代器新近返回的元素删除。
  • ListIterator是一个更强大的Iterator的子类型,可以双向移动。并且可以在当前元素后添加元素。
    1).hasPrevious()方法检查序列中是否有上一个元素。
    2).previous()方法获取上一个元素。
    3).还可以使用set()方法替换访问过的最后一个元素。

4. LinkedList

  • LikedList不光在顺序访问元素和插入删除元素上相对ArrayList更加迅速,还提供了可以使其用作栈、队列或双端队列的方法。
    1). getFirst()与element()方法都是返回列表的头(第一个元素),并不移除它。如果List为空则抛异常。
    2). peek()方法也返回列表头,但是列表为空则返回null。
    3). addFirst()在列表头添加元素,add()和addLast()在列表尾添加元素。

5. Stack

  • “栈”通常是指“后进先出”(LIFO)的容器。有时栈也被称为“叠加栈”。

6.Set

  • Set不保存重复的元素。Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。
  • HashSet是无序的。因为出于速度原因的考虑,HashSet使用了散列。TreeSet将元素存储在红-黑树数据结构中,而HashSet使用的是散列函数。LinkedList因为查询速度的原因也使用了散列,但是它使用了链表来维护元素的插入顺序。

7.Map

  • 键值对,可以通过keySet()方法返回的结果来遍历Map。

8.Queue

  • 队列是一个典型的先进先出(FIFO)的容器。队列常被当作一种可靠的将对向从程序的某个区域传输到另一个区域的途径。队列在并发编程中特别重要,因为它们可以安全地将对象从一个任务传输给另一个任务。

9.Foreach与迭代器

  • 到目前为止,foreach主要用于数组,但是它也可以应用于任何Collection对象。之所以能应用于Collection对象,是因为Java SE5引入了新的被称为Iterable的接口,该接口包含一个能产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。

10.总结

Java提供了大量持有对象的方式

  • 数组将数字与对象联系起来。它保存类型明确的对象,查询对象是,不需要对结果做类型转换。它可以是多维的,可以保存基本类型的数据。但是数组一旦生成,其容量就不能改变。
  • Collection保存单一的元素,而Map保存相关联的键值对。有了Java的泛型,你就可以指定容器中存放指定的对象类型,因此你就不会将错误类型的对象放置到容器中,并且在从容器中获取元素时,不必进行类型转换。各种Collection和各种Map尺寸都是自动调整的。容器不能持有基本类型,但是会对基本类型做自动转换。
  • 像数组一样,List也建立数字索引与对象的关联,因此,数组和Lsit都是排好序的容器。List能自动扩充容量。
  • 如果要进行大量的随机访问,就使用ArrayList;如果要经常从表中间插入或删除元素,则应该使用LinkedList。
  • 各种Queue以及栈的行为,都有LinkedList提供支持。
  • Map是一种将对象与对象相关联的设计。HashMap用来快速访问;而TreeMap保持“键”始终处于排序状态,所以没有HashMap快。LinkedHashMap保持元素插入的顺序,但是也通过散列提供了快速访问的能力。
  • Set不接受重复元素。HashSet提供最快的查询速度,而TreeSet保持元素处于排序状态,LinkedHashSet以插入顺序保存元素。
  • 新程序中不应该在使用过时的Vector、HashTable、和Stack。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值