java8改进的List接口和ListIterator接口
List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。
Java8为List集合新增了sort()和replaceAll()方法,sor方法需要一个Comparator对象来控制元素排序,程序可使用Lambda表达式来作为参数;而replaceAll()方法则需要一个UnaryOperator来替换所有的集合元素,UnaryOperator也是一个函数式接口,因此程序可使用Lambda表达式作为参数。
与Set只提供了一个iterator()方法不同,List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法。
向前迭代的功能
Queue集合
Queue用于模拟队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器。通常队列不允许随机访问对立中的元素。
PriorityQueue实现类
priorityQueue是一个比较标准的队列实现类,其保存队列元素的顺序并不是按加入队列的顺序,而是按队列元素的大小进行重新排序。不允许插入null元素。
注意:排列顺序受到PriorityQueue的toString()方法的返回值的影响
ProorityQueue的元素有两种排序方式。
1.自然排序:采用自然排序的PriorityQueue集合中的元素必须实现了Comparable接口,而且应该是同一个类的多个实例,否则可能导致ClassCastException异常
2.定制排序:创建PriorityQueue队列时,传入一个Comparator对象,该对象负责对队列中的所有元素进行排序。采用定制排序时不要求队列元素实现Comparable接口。
PriorityQueue队列对元素的要求与TreeSet对元素的要求基本一致。
Deque接口与ArrayDeque实现类
Deque接口是Queue的子接口,它代表一个双端队列。
1.ArrayDequeu作为队列使用:
importjava.util.ArrayDeque;public classa{public static voidmain(String[] args){
ArrayDeque stack= newArrayDeque();
stack.offer("书本1");
stack.offer("书本2");
stack.offer("书本3");
System.out.println(stack);//访问第一个元素,但不将其pop出队列"栈"
System.out.println(stack.peek());
System.out.println(stack);//访问第一个元素,将其poll出队列"栈"
System.out.println(stack.poll());
System.out.println(stack);
}
}
2.ArrayDequeu作为栈使用:
importjava.util.ArrayDeque;public classa{public static voidmain(String[] args){
ArrayDeque stack= newArrayDeque();
stack.push("书本1");
stack.push("书本2");
stack.push("书本3");
System.out.println(stack);//访问第一个元素,但不将其pop出"栈"
System.out.println(stack.peek());
System.out.println(stack);//访问第一个元素,将其pop出"栈"
System.out.println(stack.pop());
System.out.println(stack);
}
}
LinkedList实现类
LinkedList类是List接口的实现类---它是一个List集合,可以根据索引来随机访问集合中的元素。LinkedList还实现了Deque接口,可以被当成双端队列使用。
总结:LinkedList既可以当成“栈”来使用,也可以当成队列使用。
importjava.util.LinkedList;public classa{public static voidmain(String[] args){
LinkedList books= newLinkedList();//添加到队列的队尾
books.offer("offer书本");//添加到栈的顶部
books.push("push书本");//添加队列的头部(相当于战的顶部)
books.offerFirst("offerFirst书本");for(int i = 0; i < books.size(); i++){
System.out.println(books.get(i));
}//访问但不删除栈顶的元素
System.out.println(books.peekFirst());//访问但不删除队列的最后一个元素
System.out.println(books.peekLast());//将栈顶元素弹出"栈"
System.out.println(books.pop());
System.out.println(books);//访问并删除队列的最后一个元素
System.out.println(books.pollLast());
System.out.println(books);
}
}