0.容器类
Java中,按照保存对象的不同,分为Collection和Map两种。其中Collection是一个独立元素的序列,又按照一定的规则,分为一下三类:
- List 按照插入的顺序保存对象
- Set 不能有重复元素
- Queue 按照队列规则来确定对象产生的序列。
而Map,是一组成对的键值对 对象。
1.添加元素
在Java.util包中的Arrays和Collections有一些方法,可以在一个Collection中添加一组元素。
- Arrays.asList
这个方法接受一个数组或是一个用逗号分割的元素列表。使用方法如下。
Integer[] ints = {1,2,3,4,5};
// 返回的为Object
List list_0 = Arrays.asList(ints);
//显示类型参数
List<Integer> list_1 = Arrays.<Integer>asList(ints);
Collections.addAll(list_1,ints);
list_0.addAll(Collection对象);
值得我们注意的是,
- Arrays.asList输出的List,其底层表示是数组,不能调整其尺寸。
- 可以通过显示类型参数来设置Array.asList返回列表类型
2.List
有两种类型的List。
- ArrayList,擅长随机访问元素,但是在List中插入和删除元素速度比较慢。
- LinkedList,优化了顺序访问,在中间进入插入和删除操作快,但是随机访问方面较慢。
一些基本的Api用法。
- contains 来确定某个对象是否在列表中。
- subList 允许你很容易地从较大列表中创建一个片段
- retainAll 求交集的操作
2.1 LinkedList
LinkedList还添加了可以使其用作栈,队列或双端队列的方法。下面就简单说明一些api的区别。(很少的一部分)
- getFirst 和 element 完全一样,返回列表的第一个元素,并不移除他。如果list为空,则抛出异常,而peek方法在list为空的时候,返回null
- removeFirst 与 remove也完全一样,他们移除并返回列表的头,在列表为空时抛出异常,而poll方法,在列表为空时返回null。
- addFirst add addLast相同,将某个元素插入到列表的尾部。
- removeLast移除并返回列表的最后一个元素
3.Set
Set中不能保存重复的对象,有以下几类。
- HashSet 使用了散列
- TreeSet 使用红黑树的数据结构保存
- LinkedHashSet 也使用了散列。
4.Queue
队列是一种典型的先进先出(FIFO)的容器。LinkedList提供了方法支持队列的行为,并且它实现了Queue接口。
- offer 在允许的情况下,将一个元素插入到队尾,或者返回false
- peek 和 element前面提到过了
- poll和remove方法移除并返回队头。
4.1 PriorityQueue
优先级队列,当通过offer来插入对象时,这个对象会在队列中被排序,默认的顺序是自然顺序。
5.Map
将对象映射到其他对象。map也很容易扩展成多维。由于我们在开发中经常用到map,所以我们这里就不在多说了。
6.迭代器
迭代器是一个对象,它的工作是遍历并选择序列中的对象,迭代器是一个轻量级对象,创建他的代价很小。Java中的Iterator只能单项移动。
- 使用iterator 要求容器返回一个Iterator
- 使用next获得序列中的下一个元素
- 使用hasNext检查序列中是否还有元素
- 使用remove将迭代器最近返回的元素删除
6.1 ListIterator
这个迭代器比较强大,因为他可以双向移动。
- hasPrevious 是否有前一个
- previous 返回前一个的元素
7.总结
- 数组将数字与对象联系起来,它保存类型明确的对象。数组一旦生成,就不能改变其容量了
- List可以自动扩容,如果要进行大量的随机访问,就使用ArrayList,如果要经常在中间进行插入删除操作,就用LinkedList
- 各种Queue以及栈的行为,由LinkedList提供支持。
- HashMap设计用来快速访问,而TreeMap保持“键”始终处在排序状态,所以没有HashMap快,LinedHashMap保持元素插入的顺序,但是也通过散列保存元素。
接下来会对这些进行详细的分析,敬请期待