JAVA 容器类的用途是 "保存对象" 并将其划分为两个不同的概念:
1)Collection,一个独立元素的序列 List Set Queue
2)Map 键值对
用数组转出来的List,因为底层还是个数组他有长度限制!
添加元素时,Collection 会根据不同的实现 调用 equals()
迭代器是一种设计模式,对于不同的容器使用同样的方式去迭代元素
Iterator只能单向移动:并随时准备好返回序列的第一个元素
1) next()
2) hasNext()
3) remove()
ListIterrator 是一个更加强大的Iterator,可以双向移动,可以指向当前位置的前一个后后一个元素,但是只能用于List的访问
ArrayList:擅长随即访问
LinkedList: 擅长指定位置插入和删除,但在随即访问上要逊色一些
Stack 栈 通常是指"后进先出"LIFO 的容器,因为最后"压入"栈的元素,第一个"弹出"栈,LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用,
Set :
HashSet :无序的Set
TreeSet 自动排序的Set
LinkedHashSet 带链表的Set
Queue 队列是一个典型的先进先出FIFO容器,一端放入另一端取出,放入容器的顺序与取出的顺序相同,在并发编程中相当重要.
LinkedList可以用作Queue的一种实现,LinkedList可以向上转型为Queue
queue.offer()将一个元素插入到队尾
queue.peek() 和 element()方法 都将在不移除的情况下返回队头,但Peek()在队列为空时返回null ,
element()会抛出noSuchElementException
poll() 和remove() 移除并返回队头,区别队列为空一个null,一个异常
PriorityQueue 优先级队列, 比如在飞机场,当飞机临近起飞时,这架飞机的乘客可以在办理登记手续时排到队头,如果是一个消息系统那么,某些消息比其他消息更重要,因而需要排到队头
Vector,hashTable,Stack 已被淘汰