编程知识 cdmana.com

《JAVA编程思想》学习笔记:第11章(持有对象)

目录
Java编程思想(一)第1~4章:概述
Java编程思想(二)第5章:初始化和清理
Java编程思想(三)第6章:访问权限
Java编程思想(四)第7章:复用类
Java编程思想(五)第8章:多态
Java编程思想(六)第9章:接口
Java编程思想(七)第10章:内部类
Java编程思想(八)第11章:持有对象
Java编程思想(九)第12章:异常
Java编程思想(十)第13章:字符串
Java编程思想(十一)第14章:类型信息
Java编程思想(十二)第15章:泛型
Java编程思想(十三)第16章:数组
Java编程思想(十四)第17章:深入研究容器
Java编程思想(十五)第18章:Java I/O系统
Java编程思想(十六)第19章:枚举
Java编程思想(十七)第20章:注解
Java编程思想(十八)第21章:并发

第十一章、持有对象

目录

11.1 迭代器(Iterator)

11.2 List

11.3 Set

11.4 Map

11.5 Collection 和 Iterator

11.6 容器的元素类型(支持泛型)

11.7 过时容器(废弃)


Java容器架构图:

 

11.1 迭代器(Iterator)

Iterator迭代器:使得客户端程序员不必知道或关心容器类的底层结构。

ListIterator:只能用于各种List类容器的访问。ListIterator可以双向移动,而Iteraotr只能向前移动。

 

11.2 List

ArrayList&LinkedList:都可自动扩容。

ArrayList:底层是数组结构,即连续存储空间,因可自动扩容,所以可以把ArrayList当作“可自动扩充自身尺寸的数组”看待。

优点:随机读取元素快; 缺点:在列表中间插入&删除数据慢;

LinkedList:是链表结构。

优点:在列表中间插入&删除数据快;缺点:随机读取元素慢(链表结构特征,需要指针遍历);

SparseList:Android提供的容器,优点:

CopeOnArrayList: 支持并发,用于多线程机制。

 

11.2.1 Stack(LIFO)

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

 

11.2.2 Queue(FIFO)

LinkdedList:也提供了支持队列(Queue)行为的方法,并且实现了Queue接口,所以也可以用作Queue。

PriorityQueue:Java SE1.5新增容器,支持先弹出优先级高的元素(可实现Comparator接口)。

 

11.3 Set

不保存重复元素,包含下列容器:

HashSet:使用散列函数? 优点:可快速查找元素(WHY??:)

TreeSet:元素存储在红-黑树中

LinkedHashSet:散列+链表 优点:快速查找+ 插入|删除 元素 场景下的效率。

EnumSet:

CopeOnWriteArraySet: 支持并发,用于多线程机制。

 

11.4 Map

K-V映射表,将对象映射到其他对象的能力是一种解决编程问题的杀手锏。

HashMap:优点:快速访问元素

TreeMap: 优点:保持“Key”排序(??)

LinkedHashMap:散列(快速访问元素)+链表(插入|删除元素性能优)

EnumMap:

ConcurrentHashMap:支持并发,支持多线程场景;

WeakHashMap:弱引用的持有对象,利于GC回收,避免内存泄露?

 

11.5 Collection 和 Iterator

Collection:在Java中,Collection是描述所有序列容器的共性的根接口,它可能会被认为是一个“附属接口”,即因为要表示其他若干个接口的共性而出现的接口。而在标准C++类库中并没有其容器的任何公共基类。

Iterator:容器之间的所有共性都是通过迭代器达成的。Java将两种方法绑定到了一起,因为实现Collection就意味着需要提供iterator()方法。

11.5.1 Foreach与迭代器

foreach语法用于任何实现了Iterable接口的类。

Collection接口扩展了Iterable接口,所以所有Collection对象都适用foreach语法。

11.5.2 选择策略

a. Java容器:建议针对Collection接口编程,可for-each;

b. 自定义容器:建议实现Iterator,可实现迭代(若自行实现Collection,逻辑较复杂 )。

 

11.6 容器的元素类型(支持泛型)

11.6.1 支持泛型

a. 容器&持有对象的类型之前解耦,可支持任意类型的数据。

b. 类型编译期检测:有了泛型,容器就可以指定并检查它们所持有对象的类型;

 

11.6.2 持有基本数据类型(自动装箱&拆箱机制)

a. 在Java中,任何基本类型都不能作为类型参数。因此不能创建ArrayList<int> 或 HashMap<int, int>之类的东西。

b. 自动装箱&拆箱机制,实现可以持有基本数据类型:利用自动包装机制和基本类型的包装器来解决,自动包装机制将自动地实现int 到 Integer的双向转换,

 

11.7 过时容器(废弃)

Vector /HashTable / Stack : (WHY?? 已有替代的容器)

版权声明
本文为[架构师训练营]所创,转载请带上原文链接,感谢
https://cbk419323.blog.csdn.net/article/details/104095241

Scroll to Top