使用Java实现简单的队列(queue)

使用Java实现简单的队列(queue)

前言

很多时候我们可以使用Java提供的queue实现队列的功能,但是当我们需要实现一些比较特殊情况下的队列的时候可能需要自己实现一个队列从而满足个性化的需求。例如我们需要实现一个由时间排列的队列,队列里的元素根据时间的大小,从小到大排列,这时候可能我们就需要自己定义一个队列了。

实现

public class TimeQueue {
    private Element head;


    public void addElement(Element e) {
        Element temp = head;
        if(temp == null) {
            head = e;
            return;
        } 

        //向队列的头添加一个元素
        if(e.time < temp.time) {
            e.next = temp;
            head = e;
            return;
        }

        //向队列某一个地方添加一个元素
        while(temp.next != null) {
            if(e.time < temp.next.time) {
                e.next = temp.next;
                break;
            }
            temp = temp.next;
        }
        temp.next = e;

    }


    public Element getElement(long time) {
        Element temp = head;
        Element last = temp;
        Element next = temp.next;
        while(next != null) {
            if(time < next.time) {
                return last;
            }
            last = next;
            next = next.next;
        }
        return null;
    }


    public Element removeElement(long time) {
        Element temp = head;
        Element last = temp;
        Element next = temp.next;
        while(next != null) {
            if(time < next.time) {
                break;
            }
            temp = last;
            last = next;
            next = next.next;
        }
        if(last == temp) {
            head = next;
        }
        temp.next = next;
        return last;
    }


    public static class Element {
        public Element next;
        public long time;
        public Element(long time ) {
            this.time = time;
        }
    }

}

测试

    public static void main(String[]args) {

        TimeQueue queue = new TimeQueue();
        queue.addElement(new TimeQueue.Element(19));
        queue.addElement(new TimeQueue.Element(20));
        queue.addElement(new TimeQueue.Element(8));
        queue.addElement(new TimeQueue.Element(118));
        queue.addElement(new TimeQueue.Element(33));
        queue.addElement(new TimeQueue.Element(99));
        queue.addElement(new TimeQueue.Element(79));


//      System.out.println(queue.getElement(100).time);
        System.out.println(queue.removeElement(0).time);
        System.out.println(queue.removeElement(0).time);

    }

版权声明:本文为oDongFangZhiZi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。