java容器(java编程思想第四版-读书笔记)
容器类库图

| List(interface) | 次序是List最重要的特点;它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素。(这只推荐LinkedList使用。)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。 |
| ArrayList* | 由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素,因为那比LinkedList开销要大很多。 |
| LinkedList | 对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方法:addFirst(),addLast(),getFirst(),getLast(),removeFirst(),和removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。 |
| Stack | “栈”通常是指“后进先出”(LIFO)的容器。LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用。本书作者不推荐使用java.util包下的Stack,推荐使用LinkedList实现自己的Stack。 public class Stack<T> { private LinkedList<T> storage = new LinkedList<T>(); public void push(T v) { storage.addFirst(v); } public T peek() { return storage.getFirst(); } public T pop() { return storage.removeFirst(); } public boolean empty() { return storage.isEmpty(); } public String toString() { return storage.toString(); } } 参考文章:栈和Java基础类的Stack类的源码实现,缺陷以及如何实现自己的Stack类 |
| Queue(interface) | 队列是一个典型的先进先出(FIFO)的容器。 |
| LinkedList |
LinkedList提供了方法以支持队列的行为,并且它实现了Queue接口,因此LinkedList可以用作Queue的一种实现。Queue<T> queue = new LinkedList<T>(); Queue接口窄化了对LinkedLlst的方法的访问权限,以使得只有恰当的方法才可以使用,因此,你能够访问的LinkedList的方法会变少(这里你实际上可以将queue转型回LlnkedList,但是至少我们不鼓励这么做)。 |
| PriorityQueue(Java SE5) | 优先级队列. 当你在PriorityQueue上调用offer()方法来插入一个对象时,这个对象会在队列中被排序。默认的排序将使用对象在队列中的自然顺序,但是你可以通过提供自己的Comparator来修改这个顺序。PriorityQueue可以确保当你调用peek().poll()和remove()方法时,获取的元素将是队列中优先级最高的元素。 |
| Set(interface) | 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯—性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序 |
| HashSet* | 为快速查找而设计的Set。存入HashSet的必须定义hashCode() |
| TreeSet | 保持次序的Set.底层为树结构。使用它可以从Set中提取有序的序列。元素必须实现Comparable接口 |
| LinkedHashSet | 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。元素也必须定义hashCode()方法 |
| Map(interface) | 一组成对的“键值对”对象,允许你使用键来查找值。 |
| HashMap* | Map基于数列表的实现(它取代了Hasbtable)。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量和负载因子,以调整容器的性能 |
| LlnkedHashMap | 类似于HashMap.但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点.而在迭代访问时反而更快,因为它使用链表维护内部次序 |
| TreeMap | 基于红黑树的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparable或Comparator决定).TreeMap的特点在于,所得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map.它可以返回一个子树 |
| WeakHashMap | 弱键(wcak key)映射,允许释放映射所指向的对象。这是为解决某类特殊问题而设计的。如果映射之外没有引用指向某个“键”,则此。键一可以被垃圾收集器回收 |
| ConcurrentHashMap | 一种线程安全的Map,它不涉及同步加锁。 |
| ldentityHashMap | 使用==代替equals()对“键”进行比较的散列映射。专为解决特殊问题而设计的 |
迭代器Iterator
1)Java的Iterator只能单向移动
2)使用方法iterator()要求容器返回一个Iterator()。 Iterator将准备好返回序列的第一个元素。
3)使用next()获得序列中的下一个元素。
4)使用hasNext()检查序列中是否还有元素。
5)使用remove()将迭代器新近返回的元紊删除。
Listlterator是一个更加强大的Iterator的子类型,它只能用于各种List类的访问。尽管Iterator只能向前移动,但是Listlterator可以双向移动。它还可以产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引,并且可以使用set()方法替换它访问过的最后一个元素。
Foreach与迭代器
forcach语法主要用于数组,但是它也可以应用于任何Collection对象。之所以能够工怍,是因为Java SE5引入了新的被称为Iterable的接口,该接口包含一个能够产生Iterator的iterator()方法,并
任何实现Iterable的类,都可以将且Iterable接口被foreach用来在序列中移动。
java容器(java编程思想第四版-读书笔记)的更多相关文章
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(三)之Everything Is an Object
---恢复内容开始--- Both C++ and Java are hybird languages. A hybird language allow multiple programming st ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(二)之Introduction to Objects
The genesis of the computer revolution was a machine. The genesis of out programming languages thus ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十四)之Type Information
Runtime type information (RTTI) allow you to discover and use type information while a program is ru ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十三)之Strings
Immutable Strings Objects of the String class are immutable. If you examine the JDK documentation fo ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十二)之Error Handling with Exceptions
The ideal time to catch an error is at compile time, before you even try to run the program. However ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十一)之Holding Your Objects
To solve the general programming problem, you need to create any number of objects, anytime, anywher ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(十)之Inner Classes
The inner class is a valuable feature because it allows you to group classes that logically belong t ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(九)之Interfaces
Interfaces and abstract classes provide more structured way to separate interface from implementatio ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(八)之Polymorphism
Polymorphism is the third essential feature of an object-oriented programming language,after data ab ...
随机推荐
- EventBus简单的实现
EventBus是最近项目用到的,也只是会些简单的功能,不过感觉功能蛮强大的.代码链接:http://download.csdn.net/detail/qq_29774291/9629346 Even ...
- [转载]OSI七层模型详解
OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 . 完成中继功能的节点通常称为中继系统.在OSI七层模型中,处于 ...
- linux基础知识总结
使用linux将近一年了,一直都没有时间来总结一下,借着最近在整理知识框架的机会总结一下linux的应用知识. 1.linux有两个目录很特殊,一个是~,另一个是/.两个目录的含义不一样,/是系统 ...
- jquery多次上传同一张图片
$().reset(); wrap():$('p').wrap('div');===><div><p></p></div>; .closest() ...
- MODIS批量处理软件MRT的安装说明
最近在处理遥感影像的时候遇见了MODIS影像数据,从中MOD13中提取NDVI是相当的重要.在一番的百度之中找到了处理modis影像的神器------MRT 接下来我来说明一下MRT的具体安装,如果之 ...
- browser.html – HTML 实现 Firefox UI
browser.html 是一个实验性的项目,用于证明一个概念:使用 HTML 重新实现 Firefox UI ,并作为一个应用程序.它是基于浏览器的 API ,并以浏览器的方式和系统的应用工作.即使 ...
- [deviceone开发]-viewShower和listView
一.简介 viewshower里嵌套listview,实现复杂的列表效果. 二.效果图 三.相关下载 http://source.deviceone.net/source-detail.html?do ...
- asp.net C#发送邮件类
很久前写的一个简单邮件发送类分享给大家: using System; using System.Data; using System.Configuration; using System.Web; ...
- 学习zepto.js(Hello World)
Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api. 如果你会用jquery,那么你也会用zepto. 昨天听说了zepto.js,正好最近也比较闲 ...
- Xcode中XVim的常用操作