zoukankan      html  css  js  c++  java
  • Java基础(十八)集合(5)Queue集合

      队列是只能在尾部添加元素,同时只能在头部删除元素的数据结构。队列的原则就是“先进先出”。

      Queue接口是Collection接口的最后一个子接口。

      Queue接口是队列接口,而Deque接口是Queue接口的子接口,可以用来实现双端队列,让人们有效地在头部和尾部同时添加或删除元素。

      ArrayDeque和LinkedList都实现了Deque接口。

      实现了Queue接口的类有两种:ArrayDeque类和PriorityQueue类。

      队列一般有两种实现方式,数组队列和链表队列。

      如果需要一个循环数组队列,就可以使用ArrayDeque类;如果需要一个链表队列,就直接使用LinkedList类,这个类实现了Queue接口。

       1.ArrayDeque(循环数组队列)

      创建一个ArrayDeque对象:

    ArrayDeque<String> aDeque = new ArrayDeque<>();

      方法测试:

    package queue.jun.iplab;
    
    import java.util.ArrayDeque;
    import java.util.Iterator;
    
    public class ArrayDequeTest {
    
        public static void main(String[] args) {
            
            String a = "A", b = "B", c = "C", d = "D", e = "E";
            ArrayDeque<String> aDeque = new ArrayDeque<>();
            aDeque.add(a);
            aDeque.add(b);
            aDeque.addFirst(c);
            aDeque.addLast(d);
            System.out.println(aDeque.isEmpty()); // 打印:false
            
            Iterator<String> it = aDeque.iterator();
            while (it.hasNext()) {                           // 打印:(队头)C A B D
                String string = (String) it.next();
                System.out.print(string + " ");
            }
            System.out.println();
            
            System.out.println(aDeque.poll());      // 打印:C
            System.out.println(aDeque.peek());   // 打印:A
            System.out.println(aDeque.peekLast());  // 打印:D
            System.out.println(aDeque.pop());          // 打印:A
            
            Iterator<String> it_1 = aDeque.iterator();
            while (it_1.hasNext()) {              // 打印:B D
                String string = (String) it_1.next();
                System.out.print(string + " ");
            }
        }
    }
    View Code

      2.PriorityQueue(高效删除最小元素队列)

      优先级队列中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索。

      优先级队列使用了堆,对二叉树进行添加和删除操作,可以让最小的元素移动到根,而不必花费时间对元素进行排序。

      与TreeSet一样,一个优先级队列既可以保存实现了Comparable接口的类对象,也可以保存在构造器中提供的Comparator对象。

      保存在PriorityQueue中的对象必须实现Comparator接口:

    public class Person implements Comparable<Object> {
        private String name;
        private long id_card; }

      以id_card的大小为排序指标,然后重写compareTo方法

        // 重写compareTo方法,按照id_card的大小进行比较,如果大的返回1,等于返回0,小于返回-1
        @Override
        public int compareTo(Object o) {
            Person person = (Person) o;
            int result = id_card > person.id_card ? 1 : (id_card == person.id_card ? 0 : -1);
            return result;
        }

      创建一个PriorityQueue对象:

    PriorityQueue<Person> pQueue = new PriorityQueue<>();

      插入五个元素:

            Person person1 = new Person("小一", 13311123);
            Person person2 = new Person("小二", 13223131);
            Person person3 = new Person("小三", 13432412);
            Person person4 = new Person("小四", 13621312);
            Person person5 = new Person("小五", 13531231);
            
            PriorityQueue<Person> pQueue = new PriorityQueue<>();
            pQueue.add(person1);
            pQueue.add(person2);
            pQueue.add(person3);
            pQueue.add(person4);
            pQueue.add(person5);

      使用迭代器访问时,不是按照元素的排列顺序访问的,而是最先访问最小的元素,然后剩余元素按照插入顺序访问:

            Iterator<Person> it = pQueue.iterator();
            while (it.hasNext()) {
                Person person = (Person) it.next();
                System.out.println(person.getName() + " " + person.getId_card());
            }

    输出:
    小二 13223131
    小一 13311123
    小三 13432412
    小四 13621312
    小五 13531231

      而执行删除操作时,却总是删除掉剩余元素中优先级最小的那个元素。

            while (!pQueue.isEmpty()) {
                System.out.println(pQueue.remove().getId_card());
            }
    
    输出:
    13223131
    13311123
    13432412
    13531231
    13621312
  • 相关阅读:
    小知识
    对NSArray中自定义的对象进行排序
    照片浏览滑动效果UIScrollView和UIPageControl组合
    label 设置行间距 字间距
    即使通讯聊天界面搭建----iOS
    ios8推送新增
    UITableviewCell滑动出现多级的控制按钮
    iOS 去掉html标签 留下原本的字符串
    平时常用的小知识点 (不断更新中)
    IOS UI多线程 NSThread 下载并显示图片到UIImageView
  • 原文地址:https://www.cnblogs.com/BigJunOba/p/9407834.html
Copyright © 2011-2022 走看看