容器基本的类型有:List, Set, Map, Queue。他们都是对象类型,也策划能够为集合类。Java中使用Collection来命名他们,故称之为容器。
Collection:独立元素的序列,List 按照插入的顺序保存元素,Set 不能有重复元素,Queue 按照排队规则(先进先出)来保存元素。
Map:保存键值对对象,允许按键来查找值。
容器可以自动的调整自身的尺寸。
List:
有两种类型的List :Arraylist , Linkedlist
ArrayList:可以自动给扩充自身尺寸的数组,add()插入对象,get() 访问这些对象,size() 得到当前数组的大小。
ArrayList<类型参数> :其中类型参数可以有多个, 没有尖括号的时候,是使用Java泛型来创建类,比较复杂,所以一般使用带有尖括号的类型参数来预定义,在List中,可以使用foreach来访问每一个元素。
LinkedList :降低插入和删除的代价,增加随机访问的代价。
contains()-- 确定某个对象是否在List 中。 remove() 移除 。equals() 。subList() 允许从较大的List 中创建一个片段 。
retainAll()
迭代器:Iterator Iterator<Pets> it = lists.iterator(); Pets a = it.next(); it.hasNext();
ListIterator 只能用于访问各种List ,比Iterator 更加强大。
LinkedList:
删除插入增强,随机访问比ArrayList 变弱。增加使其用做栈,队列或者双端队列的方法。
Stack:后进先出(LIFO)
push() 接受T类型的对象
peek() 返回栈顶元素 pop() 返回栈顶元素并且移除它。
Set: 不保存重复元素,主要用在查询某个对象是否存在于某个Set 中,查找在Set 中比较重要,因此可以考虑构造HashSet ,他专门对查找做了优化。实际上Set 就是Collection ,只是行为不同。
Map:
Map< Person, List<? extends Pet>> petPeople = new HashMap <Person ,List<? extends Pet>>();
print(petPeople.keySet()); print(petPeople.values());
for(Person person : petPeople.keySet()){
for(Pet pet : petPeople.get(person)){
print(pet);
}}
Queue: 先进先出(FIFO)
offer() 将一个元素插入队尾OR 返回false ;
peek() 和element() 在不移除的情况下返回队头元素,不同: 若队列为空,peek() 返回null, element() 抛出异常。
poll() 和 remove() 移除并且返回队头,不同: 若队列为空 , poll() 返回null, remove() 抛出异常。
自动包装机制会改变一些对象的类型来适应Queue 所需要的类型。
优先级队列:PriorityQueue