Priority Queues

来源:互联网 发布:上海雨人软件 编辑:程序博客网 时间:2024/05/17 04:38

      • Priority Queue
      • Nested Class Java嵌套类
      • Example 1 without nested class
      • Example 2 nested class

本篇文章主要介绍优先队列(Priority Queue)和嵌套类(nested class)的基本用法。
接下来的文章会介绍在实现例如Greedy Best First Search和AStar搜索算法中使用priority queue。

Priority Queue

  • In priority queue:

  • The order of the queue is controlled by implementing Comparable.

Nested Class: Java嵌套类

  • if you make an inner class static, this is commonly called a nested class.

  • create an inner class, you don’t need an outer-class object.

  • you can not access a non-static outer-class object from an object of a nested class.

Example 1 (without nested class)

  • Here is an example to show how we can specify order using Priority Queue.
/** * an example of Priority Queue * Created by HuGuodong on 2017/10/25. */public class ToDoList extends PriorityQueue<ToDoList.ToDoItem>{     class ToDoItem implements Comparable<ToDoItem> {            private char primary;            private int secondary;            private String item;            public ToDoItem(char pri, int sec, String i) {                this.primary = pri;                this.secondary = sec;                this.item = i;            }         /**          * order by the first arg, then the second arg          * @param o          * @return          */         @Override            public int compareTo(ToDoItem o) {                if (primary > o.primary) {                    return 1;                }                if (primary == o.primary) {                    if (secondary > o.secondary) {                        return 1;                    } else if (secondary == o.secondary) {                        return 0;                    }                }                return -1;            }            public String toString() {                return Character.toString(primary) + secondary + ": " + item;            }        }        public void add(char pri, int sec, String item){            super.add(new ToDoItem(pri, sec, item));        }    public static void main(String[] args){        ToDoList toDoList = new ToDoList();        toDoList.add('c', 16,"Fog");        toDoList.add('c', 3,"Dog");        toDoList.add('a', 2,"Aog");        while(!toDoList.isEmpty()){            // remove is the same as poll, except its throw Exception, when it's empty.            System.out.println(toDoList.remove());            //System.out.println(toDoList.poll());        }//            result://            a2: Aog//            c3: Dog//            c16: Fog    }}

Example 2 (nested class)

  • Here is an example of using static inner class to implement PriorityQueue.
public class MyPriorityQueue extends PriorityQueue<MyPriorityQueue.Student>{    public static void main(String[] args){        MyPriorityQueue que = new MyPriorityQueue();        que.add(new Student(100, "guodong_hu"));        que.add(new Student(99, "xie"));        que.add(new Student(1, "lin"));        while (!que.isEmpty()){            System.out.println(que.poll());        }    }    static class Student implements Comparable<Student>{        Integer no;        String name;        public Student(Integer no, String name){            this.no = no;            this.name = name;        }        @Override        public int compareTo(Student stu) {            int result;            if(no > stu.no){                result = 1;            }else if(no == stu.no){                result = 0;            }else{                result = -1;            }            return result;        }        @Override        public String toString() {            return "Student{" +                    "no=" + no +                    ", name='" + name + '\'' +                    '}';        }    }}
原创粉丝点击