集合类(容器)Collection:如List、Set、Queue、Map
一、泛型和类型安全的容器
最基本可靠地容器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以插入顺序保存元素。