大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java隊(duì)列

Java優(yōu)先級(jí)隊(duì)列

優(yōu)先級(jí)隊(duì)列是其中每個(gè)元素具有相關(guān)聯(lián)的優(yōu)先級(jí)的隊(duì)列。具有最高優(yōu)先級(jí)的元素將從隊(duì)列中刪除。

PriorityQueue 是一個(gè)實(shí)現(xiàn)類對(duì)于Java Collection Framework中的無界優(yōu)先級(jí)隊(duì)列。

我們可以使用在每個(gè)元素中實(shí)現(xiàn)的 Comparable 接口作為其優(yōu)先事項(xiàng)。

或者我們可以提供一個(gè) Comparator 對(duì)象,這將確定元素的優(yōu)先級(jí)順序。

當(dāng)向優(yōu)先級(jí)隊(duì)列添加新元素時(shí),它將根據(jù)其優(yōu)先級(jí)位于隊(duì)列中。

例子

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);
    }
  }
}

上面的代碼生成以下結(jié)果。

注意

當(dāng)您使用迭代器時(shí), PriorityQueue 類不保證元素的任何順序。

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

以下代碼顯示如何使用 Comparator 對(duì)象為ComparablePerson列表創(chuàng)建優(yōu)先級(jí)隊(duì)列。

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);
    }
  }
}

上面的代碼生成以下結(jié)果。

全部教程
主站蜘蛛池模板: 久久国产这里只精品免费 | 久久国产欧美另类久久久 | 欧美福利视频在线 | 亚洲精品国产五月色 | 99热国产这里只有精品99 | 九九干 | 四虎永久免费地址ww417 | 色综合天天综合网国产成人网 | 免费a视频在线观看 | 韩国欧美一级毛片免费 | 模特啪啪 | 狠狠干奇米 | 丁香婷婷综合网 | 国产精品久久久久毛片真精品 | 国产欧美日韩网站 | 成人午夜毛片在线看 | 亚洲成人网在线播放 | 久久国产精品亚洲 | 日本欧美一区二区三区 | 亚洲成年人视频 | 国产亚洲精品一区999 | 久久久久国产精品 | 久久福利免费视频 | 午夜在线不卡 | 欧美大陆日韩一区二区三区 | 国产高清不卡一区二区 | 成人影院观看 | 毛片免费看 | 日韩欧美高清视频 | 手机看片在线精品观看 | 国产小视频精品 | 色鬼久久| 豆国产96在线 | 亚洲 | 日日操操 | 亚洲成人免费 | 亚洲精品专区一区二区三区 | 四虎精品免费国产成人 | 97色老99久久九九爱精品 | 伊人久综合 | 天天操夜操| 国产精品96久久久久久久 |