• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
风吹花落泪如雨
博客园    首页    新随笔    联系   管理    订阅  订阅

JAVA集合(三)List集合,Queue集合

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作为队列使用:

import java.util.ArrayDeque;
public class a{
  public static void main(String[] args){
    ArrayDeque stack = new ArrayDeque();
    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作为栈使用:

import java.util.ArrayDeque;
public class a{
  public static void main(String[] args){
    ArrayDeque stack = new ArrayDeque();
    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既可以当成“栈”来使用,也可以当成队列使用。

import java.util.LinkedList;
public class a{
  public static void main(String[] args){
    LinkedList books = new LinkedList();
    //添加到队列的队尾
    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);
  }
}

 

posted @ 2018-06-13 15:58  风吹花落泪如雨  阅读(717)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3