java queue list_JAVA集合(三)List集合,Queue集合

java8改进的List接口和ListIterator接口

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。

74c8d3372000aa0ad771c5a9b96f1752.png

Java8为List集合新增了sort()和replaceAll()方法,sor方法需要一个Comparator对象来控制元素排序,程序可使用Lambda表达式来作为参数;而replaceAll()方法则需要一个UnaryOperator来替换所有的集合元素,UnaryOperator也是一个函数式接口,因此程序可使用Lambda表达式作为参数。

57a1e2b0c2f6db9c55f48d7284a0ba7b.png

与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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值