Jonolajapinta Javassa

Jonolajapinta on osa java.util paketti ja laajentaa Keräysrajapinta . Se tallentaa ja käsittelee tietoja järjestyksessä, jossa elementit lisätään takaosaan ja poistetaan edestä.

Keskeiset ominaisuudet

  • FIFO -tilaus: Elementit käsitellään siinä järjestyksessä, kun ne asetettiin (ensimmäinen ensimmäinen-out).
  • Ei satunnaista pääsyä: Toisin kuin List -elementtejä ei voida käyttää suoraan hakemistolla.
  • Useita variantteja: Sisältää PriorityQueue Deque ArrayDeque- ja LinkedList -toteutukset.
  • Kaksi menetelmäjoukkoa: Heittoversiot (lisää poistoelementti) ja turvalliset versiot (tarjoa kyselyjen kurkistus).

Java -jonotietopinnan julistus

Jonolajapinta julistetaan seuraavasti:

Julkisen käyttöliittymän jono laajentaa kokoelmaa

Emme voi välittää jonoa suoraan, koska se on käyttöliittymä. Täällä voimme käyttää tätä käyttöliittymän toteuttavaa luokkaa LinkedList tai Priorityqueue.

Jonottaa jono = uusi LinkedList ();

Nyt käydään läpi yksinkertainen esimerkki, sitten sukellamme syvälle artikkeliin.

Esimerkki: Perusjono LinkedList: n avulla

Java
   import     java.util.LinkedList  ;   import     java.util.Queue  ;   public     class   Geeks     {          public     static     void     main  (  String     args  []  )         {      // Create a Queue of Integers using LinkedList      Queue   <  Integer  >     q     =     new     LinkedList   <>  ();          System  .  out  .  println  (  'Queue elements: '     +     q  );      }   }   

Tulos
Queue elements: []  

Koska jono on rajapinta, tarvitsee betoniluokan ilmoitukselle ja yleisimmät luokat ovat Prulityquene ja Linkityslista Java. Huomaa, että kumpikaan näistä toteutuksista ei ole säie-turvallista. Prioriteettiblockingqueue on yksi vaihtoehtoinen toteutus, jos säie-turvallista toteutusta tarvitaan.

Jono -objektien luominen

Jono on käyttöliittymä, joten tyyppistä jonosta ei voida luoda objekteja. Tarvitsemme aina luokan, joka laajentaa tätä luetteloa objektin luomiseksi. Ja myös käyttöönoton jälkeen Geneerit Java 1.5: ssä on mahdollista rajoittaa jonoon tallennettava esinetyyppi. Tämän tyyppinen turvallinen jono voidaan määritellä seuraavasti:

Java
   // Obj is the type of the object to be stored in Queue   Queue   <  Obj  >     queue     =     new     PriorityQueue   <  Obj  >     ();   

Yleiset menetelmät

Jonolajapinta tarjoaa useita menetelmiä jonon elementtien poistamiseksi ja tarkastamiseksi. Tässä on joitain yleisimmin käytetyistä menetelmistä:

  • Lisää (elementti) : Lisää elementin jonon takaosaan. Jos jono on täynnä, se heittää poikkeuksen.
  • tarjous (elementti): Lisää elementin jonon takaosaan. Jos jono on täynnä, se palauttaa väärän.
  • poistaa() : Poistaa ja palauttaa elementin jonon etuosaan. Jos jono on tyhjä, se heittää poikkeuksen.
  • kysely (): Poistaa ja palauttaa elementin jonon etuosaan. Jos jono on tyhjä, se palauttaa NULL: n.
  • elementti (): Palauttaa jonon etuosan elementin poistamatta sitä. Jos jono on tyhjä, se heittää poikkeuksen.
  • kurkistaa() : Palauttaa elementin jonon etuosaan poistamatta sitä. Jos jono on tyhjä, se palauttaa NULL: n.

Esimerkki 1: Tämä esimerkki osoittaa basic -jonooperaatiot.

Java
   import     java.util.LinkedList  ;   import     java.util.Queue  ;   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {      Queue   <  String  >     queue     =     new     LinkedList   <>  ();      // add elements to the queue      queue  .  add  (  'apple'  );      queue  .  add  (  'banana'  );      queue  .  add  (  'cherry'  );      System  .  out  .  println  (  'Queue: '     +     queue  );      // remove the element at the front of the queue      String     front     =     queue  .  remove  ();      System  .  out  .  println  (  'Removed element: '     +     front  );      // print the updated queue      System  .  out  .  println  (  'Queue after removal: '     +     queue  );      // add another element to the queue      queue  .  add  (  'date'  );      // peek at the element at the front of the queue      String     peeked     =     queue  .  peek  ();      System  .  out  .  println  (  'Peeked element: '     +     peeked  );      // print the updated queue      System  .  out  .  println  (  'Queue after peek: '     +     queue  );      }   }   

Tulos
Queue: [apple banana cherry] Removed element: apple Queue after removal: [banana cherry] Peeked element: banana Queue after peek: [banana cherry date]  

Esimerkki 2 -

Java
   import     java.util.LinkedList  ;   import     java.util.Queue  ;   public     class   Geeks     {      public     static     void     main  (  String  []     args  ){      Queue   <  Integer  >     q     =     new     LinkedList   <>  ();      // Adds elements {0 1 2 3 4} to the queue      for     (  int     i     =     0  ;     i      <     5  ;     i  ++  )      q  .  add  (  i  );      // Display contents of the queue      System  .  out  .  println  (  'Elements of queue: '     +     q  );      // To remove the head of queue      int     removedele     =     q  .  remove  ();          System  .  out  .  println  (  'Removed element:'  +     removedele  );      System  .  out  .  println  (  q  );      // To view the head of queue      int     head     =     q  .  peek  ();      System  .  out  .  println  (  'Head of queue:'  +     head  );      // Rest all methods of collection interface like size and contains can be used with this implementation.      int     size     =     q  .  size  ();      System  .  out  .  println  (  'Size of queue:'     +     size  );      }   }   

Tulos
Elements of queue: [0 1 2 3 4] Removed element:0 [1 2 3 4] Head of queue:1 Size of queue:4  

Luokat, jotka toteuttavat jonorajapinnan

1. PriorityQuEue

PriorityQuEue -luokan avulla voimme prosessoida elementtejä niiden prioriteetin perusteella normaalin jonon tavanomaisen FIFO -järjestyksen sijasta. Se on hyödyllistä, kun elementtejä on käsiteltävä prioriteettijärjestyksessä. Näin voimme luoda jonon tällä luokalla.

Esimerkki:

Java
   import     java.util.*  ;   class   Geeks     {      public     static     void     main  (  String     args  []  ){      // Creating empty priority queue      Queue   <  Integer  >     pq     =     new     PriorityQueue   <  Integer  >  ();      // Adding items to the pQueue using add()      pq  .  add  (  10  );      pq  .  add  (  20  );      pq  .  add  (  15  );      // Printing the top element of the PriorityQueue      System  .  out  .  println  (  pq  .  peek  ());      // Printing the top element and removing it the PriorityQueue container      System  .  out  .  println  (  pq  .  poll  ());      // Printing the top element again      System  .  out  .  println  (  pq  .  peek  ());      }   }   

Tulos
10 10 15  

2. LinkedList

LinkedList on lineaarinen tietorakenne, jossa elementit tallennetaan erillisinä objekteina, jotka sisältävät datan ja linkin seuraavaan elementtiin. Elementit on kytketty osoittimilla, joita ei tallenneta jatkuvaan muistiin. Näin voimme luoda jonon tällä luokalla.

Esimerkki:

Java
   import     java.util.*  ;   class   Geeks     {      public     static     void     main  (  String     args  []  )      {      // Creating empty LinkedList      Queue   <  Integer  >     ll     =     new     LinkedList   <  Integer  >  ();      // Adding items to the ll using add()      ll  .  add  (  10  );      ll  .  add  (  20  );      ll  .  add  (  15  );      // Printing the top element of the LinkedList      System  .  out  .  println  (  ll  .  peek  ());      // Printing the top element and removing it from the LinkedList container      System  .  out  .  println  (  ll  .  poll  ());      // Printing the top element again      System  .  out  .  println  (  ll  .  peek  ());      }   }   

Tulos
10 10 20  

3. Priority Blockingqueue

PriorityBlockingqueue on säie-turvallinen rajaton estojono, joka tilaa elementtejä, kuten prioriteetti ja tukee hakua. Koska se on rajattomia lisääviä elementtejä, voi silti epäonnistua, jos muisti loppuu. Näin voit luoda jono tämän luokan avulla.

Esimerkki:

Java
   import     java.util.concurrent.PriorityBlockingQueue  ;   import     java.util.*  ;   class   Geeks     {      public     static     void     main  (  String     args  []  )      {      // Creating empty priority blocking queue      Queue   <  Integer  >     pbq     =     new     PriorityBlockingQueue   <  Integer  >  ();      // Adding items to the pbq using add()      pbq  .  add  (  10  );      pbq  .  add  (  20  );      pbq  .  add  (  15  );      // Printing the top element of the PriorityBlockingQueue      System  .  out  .  println  (  pbq  .  peek  ());      // Printing the top element and removing it from the PriorityBlockingQueue      System  .  out  .  println  (  pbq  .  poll  ());      // Printing the top element again      System  .  out  .  println  (  pbq  .  peek  ());      }   }   

Tulos
10 10 15  

Erilaiset toiminnot jonorajapinnalla priorityQuEue -luokan avulla

1. Elementtien lisääminen

Jos haluat lisätä elementin jonoon, voimme käyttää add () -menetelmä . Lisäysmääräystä ei säilytetä prioriteettina. Elementit tallennetaan prioriteettijärjestyksen perusteella, joka nousee oletuksena. 

Esimerkki:

Java
   import     java.util.*  ;   public     class   Geeks     {      public     static     void     main  (  String     args  []  )      {      Queue   <  String  >     pq     =     new     PriorityQueue   <>  ();      pq  .  add  (  'Geeks'  );      pq  .  add  (  'For'  );      pq  .  add  (  'Geeks'  );      System  .  out  .  println  (  pq  );      }   }   

Tulos
[For Geeks Geeks]  

2. elementtien poistaminen

Elementin poistamiseksi jonosta voimme käyttää Poista () -menetelmä. Jos esineitä on useita, esineen ensimmäinen esiintyminen poistetaan. Se kysely () menetelmä käytetään myös pään poistamiseen ja palauttamiseen. 

Esimerkki:

Java
   import     java.util.*  ;   public     class   Geeks     {      public     static     void     main  (  String     args  []  )      {      Queue   <  String  >     pq     =     new     PriorityQueue   <>  ();      pq  .  add  (  'Geeks'  );      pq  .  add  (  'For'  );      pq  .  add  (  'Geeks'  );      System  .  out  .  println  (  'Initial Queue: '     +     pq  );      pq  .  remove  (  'Geeks'  );      System  .  out  .  println  (  'After Remove: '     +     pq  );      System  .  out  .  println  (  'Poll Method: '     +     pq  .  poll  ());      System  .  out  .  println  (  'Final Queue: '     +     pq  );      }   }   

Tulos
Initial Queue: [For Geeks Geeks] After Remove: [For Geeks] Poll Method: For Final Queue: [Geeks]  

3. jonon iterointi

Jonon läpi on useita tapoja iteroida. Tunnetuin tapa on jonon muuntaminen taulukkoon ja kulkeminen Silmukka . Jonossa on myös sisäänrakennettu iteraattori, jota voidaan käyttää iterointiin jonon läpi. 

Esimerkki:

Java
   import     java.util.*  ;   public     class   Geeks     {      public     static     void     main  (  String     args  []  )      {      Queue   <  String  >     pq     =     new     PriorityQueue   <>  ();      pq  .  add  (  'Geeks'  );      pq  .  add  (  'For'  );      pq  .  add  (  'Geeks'  );      Iterator     iterator     =     pq  .  iterator  ();      while     (  iterator  .  hasNext  ())     {      System  .  out  .  print  (  iterator  .  next  ()     +     ' '  );      }      }   }   

Tulos
For Geeks Geeks  

Jonolajapinnan menetelmät

Tässä on jonon täydellinen menetelmäluettelo Java -käyttöliittymä ja kaikki sen perimän menetelmät kokoelmasta Ja iterable .

Menetelmä

Kuvaus

boolean add (e) Lisää elementti; heittää poikkeuksen, jos täynnä.
Boolen tarjous (E E) Lisää elementti; Palauttaa väärän, jos täynnä.
E poista () Poistaa pään; heittää poikkeuksen, jos tyhjä.
E -kysely () Poistaa pään; Palauttaa NULL: n, jos tyhjä.
Ja elementti () Hakee pään; heittää poikkeuksen, jos tyhjä.
E peek () Hakee pään; Palauttaa NULL: n, jos tyhjä.
Boolean Addall (kokoelma c) Lisää kaikki elementit toisesta kokoelmasta.
tyhjyys () Poistaa kaikki elementit.
Boolean sisältää (objekti O) Tarkistaa, onko elementti olemassa.
Boolean ContsAnsAll (kokoelma c) Tarkistaa, onko kaikkia elementtejä olemassa.
boolean vastaa (objekti o) Verrataan toiseen kokoelmaan.
int hashcode () Palauttaa hash -koodin.
boolean isEmpty () Tarkistaa, onko kokoelma tyhjä.
Iteraattori iterator () Palauttaa iteraattorin elementeille.
Boolean Poista (objekti O) Poistaa tietyn elementin.
Boolen Removeal (kokoelma c) Poistaa kaikki vastaavat elementit.
boolean säilyttäminen (kokoelma c) Pitää vain määriteltyjä elementtejä.
Int -koko () Palauttaa elementtien määrän.
Esine [] toarray () Palauttaa elementit taulukona.
T [] toarray (t [] a) Palauttaa elementit kirjoitettuna taulukona.
Oletusarvo tyhjä foreach (kuluttaja toiminta) Suorittaa toiminnan jokaiselle elementille.
Oletusarvo tyhjä foreach (kuluttaja toiminta) Suorittaa toiminnan jokaiselle elementille.
laiminlyönti halkaisija () Palauttaa halkaisimen.
oletusvirta stream () Palauttaa peräkkäisen virran.
oletusvirta rinnakkain () Palauttaa rinnakkaisen virran.