JAVA容器类类库的用途是 "保存对象",并将其划分为两个不同的概念:
1) Collection。一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能用重复元素。Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)
2)Map。一组成对的 "键值对" 对象,允许你使用键来查找值。ArrayList允许你使用数字
Arrays.asList()方法接受一个数组或是一个用逗号分隔的元素列表(使用可变参数),并将其转换为一个List对象。Collections.addAll()方法接受一个Collection对象,以及一个数组或是一个用逗号分割的列表,将元素添加到Collection中。
List
由两种基本类型的List:
基本的ArrayList,它长于随机访问元素,但是在List的中间插入和移除元素时较慢。
LinkedList,它通过代价较低的List中间进行的插入和删除操作,提供了优化的顺序访问。LinkedList在随机访问方面相对比较慢,但是它的特性集较ArrayList更大。
Stack:"栈"通常是指"后进先出" (LIFO)的容器。Stack可以基于LinkedList实现
Set
Set不保存重复的元素。Set中最常被使用的是测试归属性,你可以很容易地询问某个对象是否在某个Set中。正因如此,查找就成为了Set中最重要的操作,因此你通常都会选择一个HashSet的实现,它专门对快速查找进行了优化。TreeMap基于红黑树,有序。LinkedHashSet基于链表,有序。
Map
将对象映射到其它对象
Queue
队列是一个典型的先进先出(FIFO)的容器。即从容器的一端放入事物,从另一端取出。队列常被当做一种可靠的将对象从程序的某个区域传输到另一个区域的途径。
LinkedList提供了方法以支持队列的行为,并且它实现了Queue接口,因此LinkedList可以用作Queue的一种实现。通过将LinkedList向上转型为Queue。
PriorityQueue
优先级队列声明下一个弹出的元素是最需要的元素(具有最高的优先级)。当你在PriorityQueue上调用offer(0方法插入一个对象时,这个对象会在队列中被排序。默认的排序将使用对象在队列中的自然排序,但是你可以通过提供自己的Comparator来修改这个顺序。PriorityQueue可以确保当你调用peek(), poll()和remove()方法时,获取的元素将是队列中优先级最高的元素。
集合图