持有对象
一、Collection接口
1.ArrayList与LinkedList:基本点ArrayList,擅长随机访问元素,但是在List的中间插入和移除元素时比较慢;LinkedList,能以低代价在List的中间进行插入和移除操作,提供了优化的顺序访问,但在随机访问元素是比较慢。
2.关于ArrayList的一些方法:
1)remove():移除某个元素。
2)contains():确定某个对象是否在列表中。
3)indexOf():返回某个元素在List集合在位置的索引编号。
4)subList():截取List集合中的某一段,如subList(1,4)。
5)retainAll():比较两个List集合中的元素,保留交集。
6)removeAll():移除List集合中所有元素。
3.关于LinkedList的一些方法:
1)getFirst()和element():返回列表第一个元素,不会移除它,如果为空会抛出NoSuchElementException。
2)peek():返回列表第一个元素,但是当列表为空时返回null。
3)removeFirst ()和remove():移除并返回列表的第一个元素,如果列表为空抛出NoSuchElementException。
4)poll():移除并返回列表的第一个元素,列表为空则返回null。
5)addFirst()、add()和addLast():都将某个元素插入到列表的尾部。
6)removeLast():移除并返回列表最后一个元素。
4.Stack栈
“栈”通常指“后进先出”(LIFO),即第一个压入元素最后才会弹出,如手枪弹夹。同时LinkedList具有直接实现栈所有功能的方法。
public class LinkedListStack<T>{
private LinkedList<T> listStack = new LinkedList<>();
//压栈
public void push(T t){
listStack.addFirst(t);
}
//取栈
public T peek(){
return listStack.getFirst();
}
public T pop(){return listStack.removeFirst();}
public boolean empty(){return listStack.isEmpty();}
}
5.Set
Set不保存重复元素,Set集合具有与Collection完全一样的接口。Set最常被用于判断某元素是否在Set集合中,因此通常会选择使用HashSet,能够实现快速查找。Set集合有:HashSet能够实现快速查找,使用散列函数;TreeSet可对集合内部排序,采用红-黑树数据结构存储;LinkedHashList采用散列。
二、Queue与PriorityQueue
Queue队列是一个典型的先进先出(FIFO)容器,即从容器的一端放入事物,从另一端取出,并且事物放入容器的顺序与取出的顺序是相同的。
PriorityQueue优先队列,队列按照一定的规则来取出当前优先级最高的元素。PriorityQueue中的offer()方法可用于插入一个元素,使用默认的排序来对元素排序;peek()、poll()和remove()方法,获取的元素都是队列中优先级最高的元素;Collection.reverseOrder()可产生反序的Comparator。
三、迭代器
迭代器是一个对象,它的工作是遍历并选择序列中的对象,迭代器通常被称为轻量级对象:创建它的代价小。但是iterator只能单向移动:
1)使用方法iterator()要求容器返回一个iterator。
2)使用next()获得序列中的下一个元素。
3)使用hasNext()检查序列中是否还有元素。
4)使用remove()将迭代器新近返回的元素删除,remove()前必须先调next()。
Iterator<Demo> it = demo.iterator();
while(it.hasNext()){
Demo d = it.next();
it.remove();
}