Java-da Prioritet Sıra


Java Java növbəsi Prioritet SıraBaxılıb 90

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

Java-da Prioritet Sıra

Java-dakı PriorityQueue, həyata keçirən bir sinifdir Queue interface və prioritet əsasında məlumatları işləyin. İlk çıxma konsepsiyasını izləyir, yəni elementləri arxadan yerləşdirib ön tərəfdən silməyimiz deməkdir. Elementləri təbii qaydada və ya istifadə etdiyimiz müqayisəyə əsasən sıralayır. PriorityQueue sinfi java.util-də mövcuddur paketi.

PriorityQueue xüsusiyyətləri

  • Növbənin ölçüsü dinamik şəkildə böyüyür
  • İlkin tutum 11-dir, lakin konstruktordan istifadə edərək dəyişə bilərik
  • Null dəyərləri saxlaya bilmirik.
  • Varsayılan olaraq, çeşidləmə üçün təbii qaydanı izləyir.
  • Xüsusi çeşidləmə sifarişini həyata keçirmək üçün konstruktor daxilindəki müqayisədən istifadə edə bilərik.
  • Bu mövzu təhlükəsiz deyil
  • Zaman mürəkkəbliyi insert və anket metodları üçün O (log (n)) dir.

PriorityQueue Hiyerarşisi

Java-da Prioritet Sıra

İnşaatçılar

konstruktortəsvir
PriorityQueue ()Varsayılan tutumu 11 olan bir PriorityQueue yaradır
PriorityQueue (Kolleksiya c)Müəyyən edilmiş kolleksiya elementləri ilə bir PriorityQueue yaradır
PriorityQueue (int tutumu)Müəyyən edilmiş tutumu olan bir PriorityQueue yaradır
PriorityQueue (int tutumu, Müqayisələndirici komparator)Müəyyən edilmiş tutumu olan bir PriorityQueue yaradır və qeyd olunan müqayisə əsasında elementləri sifariş edir.
PriorityQueue (PriorityQueue q)Müəyyən edilmiş PriorityQueue elementləri ilə bir PriorityQueue yaradır
PriorityQueue (SortSet s)SortSet-də göstərilən elementlərlə PriorityQueue yaradır

metodika

PriorityQueue sinfi Queue, Collection və Object-dən metodlar alır.

ÜsultəsvirParametr
Mantı əlavə et (String e)Göstərilən elementi növbənin sonuna əlavə edire - əlavə ediləcək element.
Qaytarma dəyəri - Doğru
Boolean addAll (Collection c)Sıra göstərilən elementlər toplusunu əlavə edir.c - əlavə ediləcək elementlər toplusu
Qaytarma dəyəri - doğrudur
boşluq təmiz ()Növbədəki bütün elementləri təmizləyir.
Mantiq tərkibində (Nesne o) varNövbədə göstərilən elementin olub-olmadığını yoxlayırQaytarma dəyəri - növbədə element varsa, doğrudur
BooleanAll (Collection c) ehtiva edirNövbədə kolleksiyadakı bütün elementlərin olub-olmadığını yoxlayırQaytarma dəyəri - növbə bütün elementləri ehtiva edərsə doğrudur
Obyekt elementi ()Sıradakı ilk elementi (baş) qaytarır
Mantiq bərabərdir (O ​​obyekt)Növbədə göstərilən bütün elementləri dəqiq qaydada ehtiva etdiyini müqayisə edirQaytarma dəyəri - obyekt elementləri növbə ilə uyğun gəlsə doğrudur
Boole isEmpty ()Növbənin boş olub olmadığını yoxlayırQaytarma dəyəri - növbədə dəyər olmadıqda doğrudur
Təkrarlayıcı iterator ()Növbənin iteratorunu ardıcıllıqla alırQaytarma dəyəri - təkrarlayıcı
Mantı təklifi (Nesne e)Elementi quyruq kimi daxil edire - əlavə ediləcək element
Obyekt nəzərdən keçirmə ()Növbənin ilk elementini alır (baş)Növbənin boş olduğu halda sıfır qaytarır
Obyekt sorğusu ()Növbənin ilk elementini götürür və silir (baş)Növbənin boş olduğu halda sıfır qaytarır
Obyekt sil ()İlk elementi növbədən çıxarır
Mantı sil (Nesne o)Göstərilən obyektin mövcudluğunu ilk növbəni növbədən çıxarıro - Sökülməsi lazım olan element
Qaytarma dəyəri - növbədə element varsa, doğrudur
Boolean kaldırAll (Collection c)Kolleksiyadakı bütün elementlərin ilk meydana gəlməsini mövcud olduqda növbədən çıxarırc - elementlərin toplanması
Qaytarma dəyəri - növbədə kolleksiya varsa doğrudur
Boolean tutmaAll (Collection c)Koleksiyonda göstərilən bütün elementləri növbədə saxlayır. Digər elementlər silinəcəkdirc - saxlanılması lazım olan elementlər toplusu
Qaytarma dəyəri - çağırılan metod sayəsində növbə dəyişsə, doğrudur
int ölçüsü ()Növbənin ölçüsünü götürürQaytarma dəyəri - növbənin ölçüsü
Spliterator spliterator ()Növbədəki elementlərin üzərinə bir ayırıcı qaytarır
Obyekt [] toArray ()Bir sıra elementləri müvafiq ardıcıllıqla qaytarırQaytarma dəyəri - Növbədəki bütün elementlərin müvafiq ardıcıllıqla düzülməsi
String toString ()Elementlər kolleksiyasının bir Sətir təmsilini qaytarırQaytarma dəyəri - Vergül və boşluqla ayrılmış və [] daxilində olan sıra elementlərinin sətri

Nümunə: PriorityQueue-a elementlər daxil edin

Aşağıdakı nümunə add () və addAll () metodlarından istifadə edərək PriorityQueue-a elementlərin necə əlavə olunacağını göstərir. Java-da bir PriorityQueue-a bir dəyər əlavə etmək üçün offer () metodundan da istifadə edə bilərik.

import java.util.PriorityQueue;

public class InsertPriorityQueueElements {

  public static void main(String[] args) {
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    pq.add(30);
    pq.add(20);
    pq.add(10);
    pq.add(40);
    
    System.out.println("Elements in the PriorityQueue after add method: " + pq);
    
    PriorityQueue<Integer> p = new PriorityQueue<Integer>();
    p.add(60);
    p.add(50);
    
    pq.addAll(p);
    
    System.out.println("Elements in the PriorityQueue after addAll method: " + pq);

    pq.offer(70);
    System.out.println("Elements in the PriorityQueue after offer method: " + pq);

  }

}
Elements in the PriorityQueue after add method: [10, 30, 20, 40]
Elements in the PriorityQueue after addAll method: [10, 30, 20, 40, 50, 60]
Elements in the PriorityQueue after offer method: [10, 30, 20, 40, 50, 60, 70]

Nümunə: PriorityQueue-dan elementləri silin

Aşağıdakı nümunə, Remove () metodundan istifadə edərək Java-dakı PriorityQueue-dan müəyyən bir dəyəri necə silməyi təsvir edir. Elementlər kolleksiyasını silmək üçün removeAll () metodundan istifadə edə bilərik. Poll () metodu qayıdır və baş elementini növbədən çıxarır.

import java.util.PriorityQueue;

public class DeletePriorityQueueElements {

  public static void main(String[] args) {
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    pq.add(30);
    pq.add(20);
    pq.add(10);
    pq.add(40);
    
    System.out.println("Elements in the PriorityQueue after add method: " + pq);
    
    PriorityQueue<Integer> p = new PriorityQueue<Integer>();
    p.add(60);
    p.add(50);
    
    pq.addAll(p);
    
    System.out.println("Elements in the PriorityQueue after addAll method: " + pq);
    
    pq.remove();
    System.out.println("Elements in the PriorityQueue after remove method: " + pq);
    
    pq.remove(40);
    System.out.println("Elements in the PriorityQueue after remove method: " + pq);
    
    pq.removeAll(p);
    System.out.println("Elements in the PriorityQueue after removeAll method: " + pq);
    
    System.out.println("Element returned and deleted by the poll method: " + pq.poll());

  }

}
Elements in the PriorityQueue after add method: [10, 30, 20, 40]
Elements in the PriorityQueue after addAll method: [10, 30, 20, 40, 50, 60]
Elements in the PriorityQueue after remove method: [20, 30, 60, 40, 50]
Elements in the PriorityQueue after remove method: [20, 30, 60, 50]
Elements in the PriorityQueue after removeAll method: [20, 30]
Element returned and deleted by the poll method: 20

Nümunə: Java PriorityQueue elementlərinə daxil olun

Java-da PriortyQueue-dakı hər elementdən keçmək üçün iterator metodundan istifadə edə bilərik. Baş elementə daxil olmaq üçün peek () metodundan istifadə edirik. Aşağıdakı nümunə dəyərlərə necə çatmağı və keçməyi göstərir.

import java.util.Iterator;
import java.util.PriorityQueue;

public class IteratePriorityQueueElements {

  public static void main(String[] args) {
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    pq.add(30);
    pq.add(20);
    pq.add(10);
    pq.add(40);
    
    System.out.println("Iterate using the iterator method");
    Iterator<Integer> i = pq.iterator();
    while(i.hasNext())
      System.out.println(i.next());

    System.out.println("Head element using the peek method: " + pq.peek());
    System.out.println("Head element using element method: " + pq.element());
  }

}
Iterate using the iterator method
10
30
20
40
Head element using the peek method: 10
Head element using element method: 10

Nümunə: Java PriorityQueue-un xüsusi dəyərlər olub olmadığını yoxlayın

Java-dakı PriorityQueue-da müəyyən bir elementin olub olmadığını yoxlamaq üçün, (()) metodundan istifadə edə bilərik. Elementlər kolleksiyasını yoxlamaq üçün containsAll () metodundan istifadə edin. Yalnız toplama elementlərini saxlaya və digər dəyərləri silə bilərik, retainAll () metodundan istifadə edirik.

import java.util.PriorityQueue;

public class CheckPriorityQueueValues {

  public static void main(String[] args) {
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    pq.add(30);
    pq.add(20);
    pq.add(10);
    pq.add(40);
    
    PriorityQueue<Integer> p = new PriorityQueue<Integer>();
    p.add(60);
    p.add(50);
    
    pq.addAll(p);
    
    System.out.println("Elements in the PriorityQueue: " + pq);
    
    System.out.println(pq.contains(20));
    System.out.println(pq.contains(100));
    System.out.println(pq.containsAll(p));
    
    pq.retainAll(p);
    
    System.out.println("Elements in the PriorityQueue after retainAll method: " + pq);

  }

}
Elements in the PriorityQueue: [10, 30, 20, 40, 50, 60]
true
false
true
Elements in the PriorityQueue after retainAll method: [50, 60]

Nümunə: Java PriorityQueue silin və boş olub olmadığını yoxlayın

Aşağıdakı nümunə, Clear () metodundan istifadə edərək PriorityQueue dəyərlərini təmizləməyi və isEmpty () metodunu istifadə edərək növbənin boş olub olmadığını yoxlamağı göstərir.

import java.util.PriorityQueue;

public class ClearPriorityQueue {

  public static void main(String[] args) {
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    pq.add(30);
    pq.add(20);
    pq.add(10);
    pq.add(40);
    
    System.out.println("Elements in the PriorityQueue: " + pq);
    
    System.out.println("Is Empty: " + pq.isEmpty());
    pq.clear();
    System.out.println("Elements in the PriorityQueue after clear method: " + pq);
    System.out.println("Is Empty: " + pq.isEmpty());

  }

}
Elements in the PriorityQueue: [10, 30, 20, 40]
Is Empty: false
Elements in the PriorityQueue after clear method: []
Is Empty: true

Misal: Comparator istifadə edərək xüsusi sifariş tətbiq edin

Java-da PriorityQueue-da dəyərlərin xüsusi sifarişini həyata keçirmək üçün öz müqayisə sinifimizi təyin edə bilərik. Aşağıdakı nümunədə növbənin başı olaraq ən böyük dəyəri qaytaran SampleComparator.java yaradırıq.

import java.util.PriorityQueue;

public class PriorityQueueComparatorDemo {

  public static void main(String[] args) {
    PriorityQueue<Integer> p = new PriorityQueue<Integer>(10, new SampleComparator());
    p.add(60);
    p.add(20);
    p.add(80);
    p.add(10);
    
    System.out.println(p);

  }

}

SampleComparator.java

import java.util.Comparator;
public class SampleComparator implements Comparator<Integer> {

  @Override
  public int compare(Integer x, Integer y) {
    if(x < y)
      return 1;
    else
      return -1;
  }

}
[80, 20, 60, 10]

Nümunə: Java obyektləri ilə PriorityQueue yaradılması

Aşağıdakı nümunədəki kimi Java obyektlərindən istifadə edərək PriorityQueue da yarada bilərik. Müqayisə oluna bilən interfeysi tətbiq edən bir Sınıf Sifariş məlumatımız var. Yuxarıdakı metodda sifariş nömrəsinə əsasən detalları göstəririk. Bu vəziyyətdə əvvəlcə ən böyük sifariş nömrəsini göstərir. OrderDetails sinifini bir arqument növü kimi PriorityQueue-a ötürməliyik. Beləliklə, OrderDetails obyektlərini növbə və prosesə əlavə edir, burada ən böyük sifariş nömrəsini baş dəyəri kimi qaytardığı yerlərdə müəyyənləşdirilənə əsasən müəyyənləşdirilir.

import java.util.Iterator;
import java.util.PriorityQueue;

public class OrderDetails implements Comparable<OrderDetails> {

  int OrderNumber;
  int Amount;
  int quantity;
  
  public static void main(String[] args) {
    OrderDetails o1= new OrderDetails(111, 1000, 5);
    OrderDetails o2 = new OrderDetails(222, 5000, 4);
    OrderDetails o3 = new OrderDetails(333, 3000, 10);
    
    PriorityQueue<OrderDetails> p = new PriorityQueue<>();
    p.add(o1);
    p.add(o2);
    p.add(o3);
    
    Iterator i = p.iterator();
    
    while(i.hasNext())
      System.out.println(i.next());
  }

  @Override
  public int compareTo(OrderDetails o) {
    if(o.OrderNumber > this.OrderNumber)
      return 1;
    else
      return -1;
  }
  
  public OrderDetails(int orderNumber, int Amount, int qty) {
    this.OrderNumber = orderNumber;
    this.Amount = Amount;
    this.quantity = qty;
  }
  
  public String toString() {
    return "Order Number: " + this.OrderNumber + ", Total Amount: " + this.Amount + ", Qty: " + this.quantity;
  }

}
Order Number: 333, Total Amount: 3000, Qty: 10
Order Number: 111, Total Amount: 1000, Qty: 5
Order Number: 222, Total Amount: 5000, Qty: 4

 

arayış

Crack Sistemi Dizayn Müsahibələri
Translate »
1