黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

Java隊列

Java優先級隊列

優先級隊列是其中每個元素具有相關聯的優先級的隊列。具有最高優先級的元素將從隊列中刪除。

PriorityQueue 是一個實現類對于Java Collection Framework中的無界優先級隊列。

我們可以使用在每個元素中實現的 Comparable 接口作為其優先事項。

或者我們可以提供一個 Comparator 對象,這將確定元素的優先級順序。

當向優先級隊列添加新元素時,它將根據其優先級位于隊列中。

例子

import java.util.PriorityQueue;
import java.util.Queue;

class ComparablePerson implements Comparable<ComparablePerson> {
  private int id;
  private String name;

  public ComparablePerson(int id, String name) {
    this.id = id;
    this.name = name;
  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  @Override
  public boolean equals(Object o) {
    if (!(o instanceof ComparablePerson)) {
      return false;
    }
    ComparablePerson p = (ComparablePerson) o;
    if (this.id == p.getId()) {
      return true;
    }

    return false;
  }

  @Override
  public int hashCode() {
    return this.id;
  }

  @Override
  public String toString() {
    return "(" + id + ", " + name + ")";
  }

  @Override
  public int compareTo(ComparablePerson cp) {

    int cpId = cp.getId();
    String cpName = cp.getName();

    if (this.getId() < cpId) {
      return -1;
    }

    if (this.getId() > cpId) {
      return 1;
    }

    if (this.getId() == cpId) {
      return this.getName().compareTo(cpName);
    }
     
    // Should not reach here 
    return 0;
  }
}

public class Main {
  public static void main(String[] args) {
    Queue<ComparablePerson> pq = new PriorityQueue<>();
    pq.add(new ComparablePerson(1, "Oracle"));
    pq.add(new ComparablePerson(4, "XML"));
    pq.add(new ComparablePerson(2, "HTML"));
    pq.add(new ComparablePerson(3, "CSS"));
    pq.add(new ComparablePerson(4, "Java"));

    System.out.println(pq);
    while (pq.peek() != null) {
      System.out.println("Head  Element: " + pq.peek());
      pq.remove();
      System.out.println("Priority  queue: " + pq);
    }
  }
}

上面的代碼生成以下結果。

注意

當您使用迭代器時, PriorityQueue 類不保證元素的任何順序。

它的toString()方法使用它的迭代器給你的元素的字符串表示。

以下代碼顯示如何使用 Comparator 對象為ComparablePerson列表創建優先級隊列。

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

class ComparablePerson implements Comparable<ComparablePerson> {
  private int id;
  private String name;

  public ComparablePerson(int id, String name) {
    this.id = id;
    this.name = name;
  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  @Override
  public boolean equals(Object o) {
    if (!(o instanceof ComparablePerson)) {
      return false;
    }
    ComparablePerson p = (ComparablePerson) o;
    if (this.id == p.getId()) {
      return true;
    }

    return false;
  }

  @Override
  public int hashCode() {
    return this.id;
  }

  @Override
  public String toString() {
    return "(" + id + ", " + name + ")";
  }

  @Override
  public int compareTo(ComparablePerson cp) {

    int cpId = cp.getId();
    String cpName = cp.getName();

    if (this.getId() < cpId) {
      return -1;
    }

    if (this.getId() > cpId) {
      return 1;
    }

    if (this.getId() == cpId) {
      return this.getName().compareTo(cpName);
    }

    // Should not reach here
    return 0;
  }
}

public class Main {
  public static void main(String[] args) {
    int initialCapacity = 5;
    Comparator<ComparablePerson> nameComparator = Comparator
        .comparing(ComparablePerson::getName);

    Queue<ComparablePerson> pq = new PriorityQueue<>(initialCapacity,
        nameComparator);
    pq.add(new ComparablePerson(1, "Oracle"));
    pq.add(new ComparablePerson(4, "XML"));
    pq.add(new ComparablePerson(2, "HTML"));
    pq.add(new ComparablePerson(3, "CSS"));
    pq.add(new ComparablePerson(4, "Java"));

    System.out.println("Priority  queue: " + pq);

    while (pq.peek() != null) {
      System.out.println("Head  Element: " + pq.peek());
      pq.remove();
      System.out.println("Removed one  element from  Queue");
      System.out.println("Priority  queue: " + pq);
    }
  }
}

上面的代碼生成以下結果。

全部教程
主站蜘蛛池模板: 天天操天天干天天做 | 东京道区二区三区 | 欧美黑人巨大性极品hd | 国产成+人+亚洲+欧美+日韩 | 国产欧美日韩在线一区二区不卡 | 亚洲导航深夜福利 | 韩国videos18高清hd | 一 级 黄 色蝶 片 | 一级大片免费 | 在线日韩不卡 | 免费高清在线观看a网站 | 婷婷六月丁香色婷婷网 | 国产农村精品一级毛片视频 | 欧美巨大另类极品video | 在线中文字日产区乱码 | 欧美日在线观看 | 日韩午夜影院 | 久久伊人婷婷 | 中文字幕一二区 | 免费看欧美一级特黄α大片 | 1769老司机人人精品视频 | 1024香蕉视频| 日本工里番h本无遮拦全彩 日本高清中文字幕在线观穿线视频 | 成人毛片免费在线观看 | 永久免费视频 | 成人性a激情免费视频 | 国产成人短视频 | 欧美经典成人在观看线视频 | 午夜免费视频福利集合100 | 日本高清中文字幕视频在线 | 天天摸天天碰色综合网 | 日韩精品一二三区 | 7mav视频| 欧美日韩国产在线人 | 天天操婷婷 | 香蕉成人国产精品免费看网站 | 成人看的羞羞视频免费观看 | 免费视频毛片 | 成人在线免费视频播放 | 亚洲成人高清 | 天天做天天爱夜夜大爽完整 |