java集合Queue

一、Queue的直接实现类:PriorityQueue 优先级队列

优先级队列
添加到队列中,保证基本的添加顺序,但是要进行比较,保证队列最前面的一个是最小的

实例如下:

package com.example.demo.day3.test1;

/**
 *  @Author: caesar
 *  @Date:2020年12月14日 16:12:20
 *  @Description: 测试实体类
 */
public class Item implements Comparable<Item>{
    // 优先级一
    private int primary;
    // 优先级二
    private int secondary;
    // 内容
    private String content;

    public Item(int primary, int secondary, String content) {
        this.primary = primary;
        this.secondary = secondary;
        this.content = content;
    }

    /**
     *  @Author: caesar
     *  @Date:2020年12月14日 17:12:22
     *  @Description: toString方法
     */
    @Override
    public String toString() {
        return "Item{" +
                "primary=" + primary +
                ", secondary=" + secondary +
                ", content='" + content + '\'' +
                '}';
    }

    /**
     *  @Author: caesar
     *  @Date:2020年12月14日 16:12:41
     *  @Description: 比较方法
     */
    @Override
    public int compareTo(Item o) {
        if(this.primary > o.primary){
            return +1;
        }
        if(this.primary == o.primary){
            if(this.secondary > o.secondary){
                return +1;
            }else if(this.secondary == o.secondary){
                return 0;
            }
        }
        return -1;
    }
}

测试类:
package com.example.demo.day3.test1;

import java.util.PriorityQueue;

/**
 *  @Author: caesar
 *  @Date:2020年12月14日 16:12:17
 *  @Description: 测试类
 */

public class PriorityQueueTest {
    public static void main(String[] args) {
        Item item = new Item(1,3,"LS");
        Item item2 = new Item(1,2,"ZS");
        Item item3 = new Item(1,1,"WW");
        Item item4 = new Item(2,2,"MB");
        Item item5 = new Item(2,1,"MM");
        // 添加到队列中,保证队列最前面的一个是最小的
        PriorityQueue<Item> priorityQueue = new PriorityQueue<Item>();
        priorityQueue.add(item);
        priorityQueue.add(item2);
        priorityQueue.add(item3);
        priorityQueue.add(item4);
        priorityQueue.add(item5);
        System.out.println(priorityQueue);
    }

}

 

二、ArrayDeque是Deque的实现类,Deque继承了Queue

ArrayDeque是线程不安全的,在没有外部同步的情况下,不能再多线程环境下使用。ArrayDequeDeque的实现类,可以作为栈来使用,效率高于Stack
也可以作为队列来使用,效率高于LinkedList。需要注意的是,ArrayDeque不支持null值。
 
1.添加元素
        addFirst(E e)在数组前面添加元素
        addLast(E e)在数组后面添加元素
        offerFirst(E e) 在数组前面添加元素,并返回是否添加成功
        offerLast(E e) 在数组后天添加元素,并返回是否添加成功

 2.删除元素
        removeFirst()删除第一个元素,并返回删除元素的值,如果元素为null,将抛出异常
        pollFirst()删除第一个元素,并返回删除元素的值,如果元素为null,将返回null
        removeLast()删除最后一个元素,并返回删除元素的值,如果为null,将抛出异常
        pollLast()删除最后一个元素,并返回删除元素的值,如果为null,将返回null
        removeFirstOccurrence(Object o) 删除第一次出现的指定元素
        removeLastOccurrence(Object o) 删除最后一次出现的指定元素
   

 3.获取元素
        getFirst() 获取第一个元素,如果没有将抛出异常
        getLast() 获取最后一个元素,如果没有将抛出异常
   

 4.队列操作
        add(E e) 在队列尾部添加一个元素
        offer(E e) 在队列尾部添加一个元素,并返回是否成功
        remove() 删除队列中第一个元素,并返回该元素的值,如果元素为null,将抛出异常(其实底层调用的是removeFirst())
        poll()  删除队列中第一个元素,并返回该元素的值,如果元素为null,将返回null(其实调用的是pollFirst())
        element() 获取第一个元素,如果没有将抛出异常
        peek() 获取第一个元素,如果返回null
      

 5.栈操作
        push(E e) 栈顶添加一个元素
        pop(E e) 移除栈顶元素,如果栈顶没有元素将抛出异常
        

 6.其他
        size() 获取队列中元素个数
        isEmpty() 判断队列是否为空
        iterator() 迭代器,从前向后迭代
        descendingIterator() 迭代器,从后向前迭代
        contain(Object o) 判断队列中是否存在该元素
        toArray() 转成数组
        clear() 清空队列
        clone() 克隆(复制)一个新的队列

posted @ 2021-01-10 16:31  码在江湖  阅读(147)  评论(0编辑  收藏  举报