• 从头认识java-15.6 队列(Queue)


    这一章节我们来讨论一下队列(Queue)。

    1.什么是队列?

    队列是一种特殊的线性表,特殊之处在于它仅仅同意在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样。队列是一种操作受限制的线性表。

    2.特性

    (1)元素是有序的

    (2)元素是先进先出

    3.java里面的实现类:Linkedlist和PriorityQueue,两者之间性能不存在区别,区别的地方是排序的行为。

    package com.ray.ch14;
    
    import java.util.LinkedList;
    import java.util.PriorityQueue;
    import java.util.Queue;
    
    public class Test {
    
    	public static <T> void test(Queue<T> queue, Generator<T> generator,
    			int count) {
    		for (int i = 0; i < count; i++) {
    			queue.add(generator.next());
    		}
    		while (queue.peek() != null) {
    			System.out.print(queue.remove() + " ");
    		}
    		System.out.println();
    	}
    
    	public static void main(String[] args) {
    		test(new LinkedList<String>(), new MyGenerator(), 10);
    		test(new PriorityQueue<String>(), new MyGenerator(), 10);
    	}
    }
    
    interface Generator<T> {
    	T next();
    }
    
    class MyGenerator implements Generator<String> {
    	private String str = "one two three four five six seven eight nine ten eleven";
    
    	private int index = 0;
    
    	@Override
    	public String next() {
    		if (index > str.split(" ").length) {
    			return "";
    		} else {
    			return str.split(" ")[index++];
    		}
    	}
    }
    


    输出:

    one two three four five six seven eight nine ten
    eight five four nine one seven six ten three two

    4.优先级队列

    排序对象实现Comparable接口就可以。

    package com.ray.ch14;
    
    import java.util.PriorityQueue;
    import java.util.Random;
    
    public class Test {
    
    	private static PriorityQueue<MyClass> priorityQueue = new PriorityQueue<MyClass>();
    
    	public static PriorityQueue<MyClass> test(int count) {
    		for (int i = 0; i < count; i++) {
    			priorityQueue.add(new MyClass(new Random().nextInt(10)));
    		}
    		return priorityQueue;
    	}
    
    	public static void main(String[] args) {
    		System.out.println(test(10));
    	}
    }
    
    class MyClass implements Comparable<MyClass> {
    	private int pri = 0;
    
    	public MyClass(int pri) {
    		this.pri = pri;
    	}
    
    	@Override
    	public int compareTo(MyClass myClass) {
    		if (this.pri < myClass.pri) {
    			return -1;
    		} else {
    			if (this.pri == myClass.pri) {
    				return 0;
    			} else {
    				return 1;
    			}
    		}
    	}
    
    	@Override
    	public String toString() {
    		return this.pri + "";
    	}
    }
    


    输出:

    [0, 1, 3, 3, 2, 5, 5, 6, 6, 7]

    5.双向队列

    特点:能够在不论什么一段加入或者删除元素。

    因为在现有的java 里面没有实现双向队列的接口。可是在Linkedlist里面事实上已经模拟出来了。因此我们使用组合来模拟一下。

    class Deque<T> {
    	private LinkedList<T> linkedList = new LinkedList<T>();
    
    	public void addFirst(T t) {
    		linkedList.addFirst(t);
    	}
    
    	public void addLast(T t) {
    		linkedList.addLast(t);
    	}
    
    	public void removeFirst() {
    		linkedList.removeFirst();
    	}
    
    	public void removeLast() {
    		linkedList.removeLast();
    	}
    }


     

    总结:这一章节主要讲述队列的概念、特点。以及优先级和双向队列。

    这一章节就到这里,谢谢。

    -----------------------------------

    文件夹

  • 相关阅读:
    java内存管理的一些基础,内存溢出的解决方案
    设计模式中类的关系 .
    一个很郁闷的问题,Java中的僵死进程
    quartzscheduler的集群化配置
    转 : 敏捷开发的原则 .
    如何进行单元测试
    欢迎来到地狱 WriteUp(2019暑假CTF第一周misc)
    20181218小黄衫获得感想和阶段性总结
    2019暑假Java学习笔记(一)
    2019“嘉韦思杯”3.30初赛一部分Write Up
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7133804.html
Copyright © 2020-2023  润新知