JAVA 容器类的用途是 "保存对象" 并将其划分为两个不一样的概念:编程
1)Collection,一个独立元素的序列 List Set Queue设计模式
2)Map 键值对数组
用数组转出来的List,由于底层仍是个数组他有长度限制!并发
添加元素时,Collection 会根据不一样的实现 调用 equals()spa
迭代器是一种设计模式,对于不一样的容器使用一样的方式去迭代元素设计
Iterator只能单向移动:并随时准备好返回序列的第一个元素对象
1) next()排序
2) hasNext()队列
3) remove()element
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 已被淘汰