天天看点

3.[Think in Java笔记]持有对象 1.容器类 2.List 3.迭代器 Iterator 4.Stack 5.Set 6.Map 7.Queue

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

数组将数字与对象联系起来。它保存类型明确的对象,查询对象时,不需要对结果做类型转换。它可以是多维的,可以保存基本类型的数据。但是数组一旦生成,其容量就不能改变。

<a target="_blank" href="http://blog.51cto.com/attachment/201306/193103715.png"></a>

四种容器:Map、List、Set和Queue,他们各自有两到三个实现版本。常用的容器用黑色粗线框表示。虚线框表示接口,实线框表示普通类。空心箭头表示一个特定的类实现了一个接口,实心箭头表示某个类可以生成箭头所指向类的对象。

任意的Collection都生成Iterator,而List可以生成ListiIterator。

其中,除TreeSet之外的所有Set都拥有与Collection完全一样的接口。List和Collection存在明显不同。Queue接口的方法都是独立的;在创建Queue的实现时,不需要使用Collection方法。Map和Collection之间为以重叠的就是Map可以使用entrySet()和values()方法来产生Collection。

Java容器类库的用途是“保存对象”,并划分为:

Collection,一个对立元素的序列,保存单一的元素;

Map,一组成对的键值对对象,保存相关联的键值对。

各种Collection和Map都可以在添加元素时自动调整大小。

容器不能持有基本类型,但自动包装机制会执行基本类型与包装器类型进行双向转换到容器中。

List将元素维护在特定的序列中,List接口在Collection的基础上添加了大量的方法。

List有两种类型的List:

ArrayList

LinkedList

List像数组一样,List也建立数字索引与对象的关联,因此,数组和List都是排好序的容器。List能自动扩充容器。

如果要进行大量的随机访问,使用ArrayList;如果经常从表中插入或删除元素,使用LinedList。

Java的Iterator只能单向移动,只能用来:

使用方法iterator()要求容易返回一个Iterator。Iterator将准备好返回序列的第一个元素;

使用next()方法获得序列中的下一个元素;

使用hasNex()方法检查序列中是否还有元素;

使用remove()方法将迭代器新近返回的元素删除。

LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用。

1

2

3

4

5

6

7

8

9

<code>public</code> <code>interface</code> <code>Stack&lt;T&gt; {</code>

<code>    </code><code>public</code> <code>T push(T item);</code>

<code>    </code><code>public</code> <code>T pop();</code>

<code>    </code><code>public</code> <code>T peek();</code>

<code>    </code><code>public</code> <code>boolean</code> <code>empty();</code>

<code>    </code><code>public</code> <code>int</code> <code>search(T desiredItem);</code>

<code>    </code><code>public</code> <code>Iterator&lt;T&gt; iteraotr();</code>

<code>    </code><code>public</code> <code>ListIterator&lt;T&gt; listIterator();</code>

<code>}</code>

Set不保存重复的元素。HashSet提供最快的查询速度,TreeSet保持元素处于排序状态,LinkedHashSet以插入顺序保存元素

Set具有与Collection完全一样的接口,美欧任何额外的功能,不像List。实际上Set就是Collection,只是行为不同。

将对象映射其他对象的能力。

Map是一种将对象(而非数字)与对象相关联的设计。HashMap设计用来快速访问;TreeMap保持“键“使用处于排序状态,所以HashMap快。LinkedhashMap保持元素插入的顺序,但也通过散列提供快速访问功能。

队列被当做一种可靠的将对象从程序的某个区域传送到另一个区域的途径。LinkedList可以用作Queue的一种实现,通过将LinkedList向上转型为Queue。

PriorityQueue

先进先出描述了最典型的队列规则。队列规则是指在给定一组队列中的元素的情况下,确定下一个弹出队列的元素的规则。先进先出声明的是/下一个元素应该是等待时间最长的元素。

优先级队列声明下一个弹出元素是最需要的元素(具有最高的优先级),当在ProiorityQueue上插入一个对象时,这个对象在队列中被拍学。

本文转自 LinkedKeeper 51CTO博客,原文链接:http://blog.51cto.com/sauron/1227991,如需转载请自行联系原作者