Java 持有对象(11)

1

如果一个程序只包含固定数量且其生命周期都是已知的对象,那么这是一个非常简单的程序。

1.泛型和类型安全的容器

  • 通过使用泛型,可以在编译期防止将错误类型的对象放置到容器中.

2.基本概念

  • Java容器类库的用途是"保存对象",并将其划分为两个不同的概念:CollectionMap.
  • Collection:一个独立元素的序列,这些元素都服从一条或多条规则.
  • Map:一组成对的"键值对"对象,允许你使用键来查找值.

3.添加一组元素

  • 在java.util包中的Arrays和Collections类中都有很多实用方法,可以在一个Collection中添加一组元素.

4.容器的打印

  • 默认的打印行为(使用容器提供的toString()方法)即可生成可读性很好的结果.

5.List

  • List承诺可以将元素维护在特定的序列中.List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和移除元素.
  • 有两种类型的List:ArrayList,LinkedList.
  • ArrayList:擅长于随机访问元素,但是在List的中间插入和移除元素时比较慢.
  • LinkedList:在随机访问方面相对比较慢,但是它的特性集较ArrayList更大.

6.迭代器

  • 任何容器类,都必须有某种方式可以插入元素并将它们再次取回.
  • 迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构.
  • 迭代器通常被称为轻量级对象:创建它的代价小.
  • ListIterator是一个更加强大的Iterator的子类型,它只能用于各种List的访问.

7.LinkedList

  • LinkedList也像ArrayList一样实现了基本的List接口,但是它执行某些操作(在List的中间插入和移除)时比ArrayList更高效,但在随机访问操作方面却要逊色一些.
  • LinkedList还添加了可以使其用作栈,队列或双端队列的方法.

8.栈

  • "栈"通常是指"后进先出"(LIFO)的容器.有时栈也被称为叠加栈.
  • LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用.

9.Set

  • Set不保存重复的元素.
  • Set具有与Collection完全一样的接口,因此没有任何额外的功能.
  • 实际上Set就是Collection,只是行为不同.
  • Set是基于对象的值来确定归属性的(Set中最常被使用的是测试归属性:contains()).

10.Map

  • 将对象映射到其他对象.

11.Queue

  • Queue是一个典型的先进先出(FIFO)的容器.
  • 队列在并发编程中特别重要,因为它们可以安全地将对象从一个任务传输到另一个任务.
  • LinkedList提供了方法以支持队列的行为,并且它实现了Queue接口,因此LinkedList可以用作Queue的一种实现.
  • PriorityQueue:优先级队列声明下一个弹出元素就是最需要的元素(具有最高的优先级).

12.Collection和Iterator

  • Collection是描述所有序列容器的共性的跟接口,它可能会被认为是一个"附属接口",即因为要表示其他若干个接口的共性而出现的接口.
  • 容器之间的共性是通过迭代器达成的,而不是Collection来表示.但是,这个两个方法绑定到了一起,因为实现Collection就意味着需要提供iterator()方法.

13.Foreach与迭代器

  • Java SE5引入了新的被称为Iterable的接口,该接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动.
  • 在Java SE5中,大量的类都是Iterable类型,主要包括所有的Collection类(但是不包括各种Map).
  • 适配器方法的惯用法.

END

你可能感兴趣的

载入中...