day11:《Thinking in Java》笔记第十一章---持有对象

集合类(容器)Collection:如ListSetQueueMap

一、泛型和类型安全的容器

最基本可靠地容器ArrayList,使用方法:创建一个实例,用add()插入对象,然后用get()访问这些对象,此时需要使用索引,像数组一样,但不需要方括号。

还有一个size()方法,使可知道有多少元素添加进来。

二、基本概念

Collection:一个独立元素的序列,List必须按照插入的顺序保存元素,而Set不能有重复元素,Queue按照排队规则确定对象产生的顺序。

Map:一组成对的“键值对”对象,允许使用键来查找值。映射表允许使用另一个对象查找某个对象,也被称为“关联数组”或“字典”。

三、添加一组元素

Arrays.asList()方法接受一个数组或用逗号分割的元素列表,并将其转换为一个List对象。

Collections.addAll()方法接受一个Collection对象、一个数组或一个用逗号分割的列表,将元素添加到Collection中。很方便,是首选方式。

Map较复杂,    除了用另一个Map之外,没有其他任何自动初始化的方式。

四、容器的打印

必须使用Arrays.toString()产生数组的可打印表示。

Java容器类库中的两种主要类型:区别是容器中每个“槽”保存的元素个数。

1.Collection:每个槽中只能保存一个元素。包括:①List:以特定的顺序保存一组元素。②Set:元素不能重复。③Queue:只允许在容器一端插入对象另一端移除对象。

2.Map:每个槽中保存两个对象。即键和与之相关联的值。

三种基本的Map:①HashMap:查找最快,不按照顺序保存元素。②TreeMap:按照比较结果的升序保存键。③LinkedHashMap:按照插入顺序保存键,同时保留了HashMap的查询速度。

五、List

两种类型的List:①基本的ArrayList:长于随机访问元素,但在List的中间插入和移除元素时较慢。②LinkedList:通过代价较低的在List中间进行插入和删除操作,提供优化的顺序访问。

subList()方法:从较大的列表中创建一个片断,将其结果传递给这个较大列表的containsAll()方法,会得到true。

retainAll()方法:有效的“交集”操作,所产生的行为依赖于equal()方法。

removeAll()方法:从List中移除在参数List中的所有元素,基于equal()方法。

六、迭代器

迭代器Iterator()是一个对象,工作是遍历并选择序列中的对象。

1.ListIterator:只能用于List类的访问,可以双向移动,而Iterator只能单向移动。

七、LinkedList

实现基本的List接口,执行例如在List中间插入或删除操作时比ArrayList更高效,但在随机访问操作方面较逊色。

八、Stack

栈Stack:后进先出的容器。

<T>表明是参数化类型,push()接受的是T类型的对象,而peek()和pop()将返回T类型的对象。Peek()方法提供栈顶元素,pop()移除并返回栈顶元素。

九、Set

Set不保存重复的元素,最常被使用的是用于测试归属性,查找是Set中最重要的操作,通常选择一个HashSet的实现,对快速查找进行优化。

Set与Collection有相同的接口,Set实际上就是Collection,只是行为不同。

十、Map

将对象映射到其他对象。Map可以返回它的键的Set,它的值的Collection,或者它的键值对的Set。

十一、Queue

队列Queue:先进先出的容器。

自动包装机制自动将nextInt()方法的int结果转换为queue所需的Integer对象。

1.PriorityQueue

优先级队列声明下一个弹出元素是最需要的元素(优先级最高)。

默认排序是对象在队列中的自然顺序,可通过提供自己的Comparator来修改这个顺序。PriorityQueue确保获取的是优先级最高的元素。

十二、Collection和Iterator

Collection是描述所有序列容器的共性的根接口。

容器之间的所有共性都是通过迭代器达成的,因此,实现Collection就意味着需要提供iterator()方法。

十三、Foreach与迭代器

1.适配器方法惯用法

有一个Iterator类,要添加一种或多种在foreach语句中使用这个类的方法,则使用适配器方法的惯用法。

十四、总结

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

1.数组将数字与对象联系起来。保存类型明确的对象。

2.Collection保存单一的元素,Map保存相关联的键值对。

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

4.要进行大量随机访问就使用ArrayList,要经常从表中间插入或删除元素则使用LinkedList。

5.各种Queue和栈的行为由LinkedList提供支持。

6.Map是一种将对象与对象相关联的设计。HashMap用来快速快速访问,TreeMap保持键始终处于排序状态,速度不如HashMap,LinkedHashMap保持元素的插入顺序,也通过散列提供快速访问能力。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值