《Thinkinginjava》第11章-持有对象
2016-06-30 15:27
369 查看
本章介绍了对象的持有技术,其实就是java中的容器,不作详细记录,只记录一些平时忽略掉的重点:
java中其实只有四种容器:Map、List、Set和Queue。
“栈”是“后进先出”(LIFO)的容器,最后一个“压入”栈的元素第一个“弹出”栈。LinkedList具有直接实现栈功能的所有方法,所以可以将LinkedList作为栈使用。
HashSet的输出没有规律可循是因为它出于速度原因的考虑使用了
队列是一个典型的
LinkedList提供了支持队列的方法,并且实现了
数组将数字和对象联系起来,它保存类型明确的对象,查询对象时,不需要对结果做类型转换,数组时可以多维的,可以保存基本类型的数据。但是,数组一旦生成,其容量就不能改变。
Collection保存单一的元素,而Map保存相关联的键值对。java的泛型使得可以指定容器中存放的对象类型,防止我们将错误的类型放到容器中,在容器中获取元素时不必进行类型转换。各种Collection和Map都可以在向容器中添加更多容器时自动调整尺寸(
像数组一样,List也建立数字索引与对象的联系,因此数组和List都是排好序的容器。List能够自动扩容。
如果要进行大量的随机访问,应该使用
各种Queue及栈的行为,由LinkedList提供支持。
Map是一种将对象(而非数字)与对象相关联的设计。HashMap设计用来快速访问;而TreeMap保持“键”始终处于排序状态,所以它没有HashMap快。LinkedHashMap保持元素插入的顺序,但是也通过散列提供了快速访问能力。
Set不接受重复元素。HashSet提供最快的查询速度,而TreeSet保持元素处于排序状态,LinkedHashSet以插入顺序保存元素。
新程序中不应该使用Vector、Hashtable和Stack。
java中其实只有四种容器:Map、List、Set和Queue。
Iterator只能前向移动,
ListIterator只能用于各种List的访问,但是它能双向移动。可以通过调用
listIterator()方法产生一个指向List开始处的ListIterator,也可以通过
listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。
LinkedList在执行插入和移除时比
ArrayList更高效,但是随机访问操作的效率低于
ArrayList,
LinkedList还添加了可以使其用作栈、队列或双端队列的方法。
“栈”是“后进先出”(LIFO)的容器,最后一个“压入”栈的元素第一个“弹出”栈。LinkedList具有直接实现栈功能的所有方法,所以可以将LinkedList作为栈使用。
HashSet的输出没有规律可循是因为它出于速度原因的考虑使用了
散列。HashSet与LinkedHashSet或TreeSet都不同,TreeSet将元素存储在
红-黑树数据接口中,LinkedHashSet也是用了散列,但是看起来它使用了链表来维护元素的插入顺序。
队列是一个典型的
先进先出(FIFO)的容器,从容器一端放入,从另一端取出,并且放入容器的顺序与从容器中取出的顺序是相同的
LinkedList提供了支持队列的方法,并且实现了
Queue接口,所以可以用作Queue的一种实现
总结
java提供了大量持有对象的方式:数组将数字和对象联系起来,它保存类型明确的对象,查询对象时,不需要对结果做类型转换,数组时可以多维的,可以保存基本类型的数据。但是,数组一旦生成,其容量就不能改变。
Collection保存单一的元素,而Map保存相关联的键值对。java的泛型使得可以指定容器中存放的对象类型,防止我们将错误的类型放到容器中,在容器中获取元素时不必进行类型转换。各种Collection和Map都可以在向容器中添加更多容器时自动调整尺寸(
自动扩容)。容器不能持有基本类型的数据。
像数组一样,List也建立数字索引与对象的联系,因此数组和List都是排好序的容器。List能够自动扩容。
如果要进行大量的随机访问,应该使用
ArrayList;如果要经常从表中间插入和删除元素,则应该使用
LinkedList。
各种Queue及栈的行为,由LinkedList提供支持。
Map是一种将对象(而非数字)与对象相关联的设计。HashMap设计用来快速访问;而TreeMap保持“键”始终处于排序状态,所以它没有HashMap快。LinkedHashMap保持元素插入的顺序,但是也通过散列提供了快速访问能力。
Set不接受重复元素。HashSet提供最快的查询速度,而TreeSet保持元素处于排序状态,LinkedHashSet以插入顺序保存元素。
新程序中不应该使用Vector、Hashtable和Stack。
java容器简图
![](http://i.imgur.com/OZVUh9h.png)
相关文章推荐
- c++中容器之总结篇
- java获取web容器地址的方法
- 迅速掌握Java容器中常用的ArrayList类与Vector类用法
- 基于Java web服务器简单实现一个Servlet容器
- python脚本监控docker容器
- 未来的容器云技术栈会怎么样?在容器技术大会上的演讲
- Kubernetes网络分析-Container间通信
- JDK高性能编程之容器
- 容器私有云和持续发布都要解决哪些基础问题 第一集
- 各大公司容器云的技术栈对比
- 6大Container OS介绍
- python脚本监控docker容器
- 什么是servlet容器
- C++ 容器
- 部署lxc
- 单例的实现种类
- 插入排序
- Spring源代码解析第一篇(IOC容器)
- ExtJS4 API文档阅读(三)——布局和容器