Generička klasa ( među kolekcijama ): Queue

Red (Queue) je kolekcija tipa "First in First Out" (FIFO) iz prostora imena System.Collections.Generic.
( da bi se koristio red, treba vam na početku: #using System.Collections.Generic; )

U nastavku radimo primer:

1 - Kreirati novu konzolnu aplikaciju i u nju dodati klasu “Zaposleni” sa dva automatski inplementirana propertija

    class Zaposleni  
    { 
       public int Id { get; set; }  
       public string Ime { get; set; }  
    }

U istom fajlu kreirati još jednu klasu u kojoj će biti naš glavni program:

    class Program  
    {  
        static void Main(string[] args)  
        {
        }  
    }

U ovoj glavnoj metodi Main kreirati tri objekta klase Zaposleni

    static void Main(string[] args)  
    {  
        Zaposleni zaposleni1 = new Zaposleni()  
        {  
            Id = 1,  
            Ime = "Andrija"  
        };  

        Zaposleni zaposleni2 = new Zaposleni()   
        {  
            Id = 2,   
            Ime = "Jova"  
        };  

        Zaposleni zaposleni3 = new Zaposleni()  
        {  
            Id = 3,  
            Ime = "Pera"  
        };  
    }

Da bi se kreirala lista zaposlenih, koristili bismo sledeće:

    List<Zaposleni> listaZaposlenih = new List<Zaposleni>(); 

gde je u stvari tip podataka: Zaposleni

Na isti način se kreira red zaposlenih:

    Queue<Zaposleni> redZaposlenih = new Queue<Zaposleni>(); 


Kako se koristi Metoda Enqueue:
 
U listi smo za dodavanje elemenata na kraj liste koristili metodu Add. Kod reda se za dodavanje elemenata na kraj reda, jedan iza drugog, koristi metoda Enqueue.

    Queue<Zaposleni> redZaposlenih = new Queue<Zaposleni>();  
    redZaposlenih.Enqueue(zaposleni1);  
    redZaposlenih.Enqueue(zaposleni2);  
    redZaposlenih.Enqueue(zaposleni3);


Kako se koristi Metoda Dequeue?
 
Da bismo dodali nešto u red koristimo metodu Enqueue. Da bi nešto "izašlo" iz reda koristimo metodu Dequeue.

PAŽNJA: ako opotrebite ovu metodu, stavka koju dobijete je izvađena iz reda i više se ne nalazi u njemu !

    int komadaPreEnqueue = redZaposlenih.Count;  
    Console.WriteLine("U redu je pre Dequeue bilo {0}",komadaPreEnqueue);  

    Zaposleni zap1 = redZaposlenih.Dequeue();  
    Console.WriteLine(zap1.Id+" "+zap1.Ime);  

    int komadaPosleDequeue = redZaposlenih.Count;  
    Console.WriteLine("U redu je posle Dequeue bilo {0}", komadaPosleDequeue);

Sada treba pokrenuti aplikaciju:

Na izlazu će biti prikazano da je pre nego što se uradi Dequeue bilo 3 elementa, a posle će da piše da je u redu 2 elementa ! Element koji je dobijen je u stvari elementkoji je prvi ubačen u red.
Nakon prvog poziva metoda Dequeue, ono što je bilo na drugom mestu je sada na prvom.
-
( to vam je kao da čekate u redu za sladoled - ko je prvi stigao, pre će biti poslužen. )

Ako bismo ponovo upotrebili metodu Dequeue, dobili bismo sledeći po redu element a u redu bi ostao onaj treći element:

    Zaposleni zap2 = redZaposlenih.Dequeue();  
    Console.WriteLine(zap2.Id+" "+zap2.Ime);  

    int komadaPosleDequeue = redZaposlenih.Count;  
    Console.WriteLine("U redu je posle Dequeue bilo {0}", komadaPosleDequeue);

I sada, šta će se desiti ako se pokrene aplikacija ? (otkrijte sami)

Petlja foreach

Način da se preuzmu svi elementi iz neke kolekcije (niz, lista, red, ...) čak i ako ne znamo koliko elemenata ćemo da dobijemo - za to se koristi foreach.

Ono što je zgodno u primeni petlje foreach - proći će kroz sve elemente u kolekciji ali ih neće izbaciti iz kolekcije !

foreach(Zaposleni zap in redZaposlenih)  
{  
    Console.WriteLine(zap.Id + " "+zap.Ime);  
}  


Peek (hajde da provirimo šta tamo ima )

Ako želimo samo da vidimo šta bi bilo sledeće na redu da izađe iz reda, a da taj element ne uklonimo iz reda, u prevodu, da provirimo, koristimo metod Peek.

  int komadaPrePeek = redZaposlenih.Count();  
  Console.WriteLine("Komada pre Peek {0}", redZaposlenih.Count);  

Zaposleni zapVirim = redZaposlenih.Peek();  
  Console.WriteLine(zapVirim.Ime);  

  int komadaPoslePeek = redZaposlenih.Count();  
  Console.WriteLine("Komada posle Peek {0}", redZaposlenih.Count);

Šta će se desiti ako se pokrene aplikacija ? (otkrijte sami)

U nastavku je programski kod primera koji je rađen na času:

using System;
using System.Collections.Generic;
using System.Linq;

class Zaposleni  
{  
public int Id { get; set; }  
    public string Ime { get; set; }  
}
class Program {
  static void Main(string[] args)  
  {  
    Zaposleni zaposleni1 = new Zaposleni()  
    {  
      Id = 1,  
      Ime = "Andrija"  
    };  

    Zaposleni zaposleni2 = new Zaposleni()  
    {  
      Id = 2,  
      Ime = "Jova"  
    };  

    Zaposleni zaposleni3 = new Zaposleni()  
    {  
      Id = 3,  
      Ime = "Pera"  
    };  

    Queue<Zaposleni> redZaposlenih = new Queue<Zaposleni>();  
    redZaposlenih.Enqueue(zaposleni1);  
    redZaposlenih.Enqueue(zaposleni2);  
    redZaposlenih.Enqueue(zaposleni3);  

    #region Dequeue metoda
    int komadaPreDequeue = redZaposlenih.Count;  
    Console.WriteLine("U redu je pre Dequeue bilo {0}", komadaPreDequeue);  

    Zaposleni zap1 = redZaposlenih.Dequeue();  
    Console.WriteLine(zap1.Id + " " + zap1.Ime);  

    int komadaPosleDequeue = redZaposlenih.Count;  
    Console.WriteLine("U redu je posle Dequeue bilo {0}", komadaPosleDequeue);  

    Zaposleni zap2 = redZaposlenih.Dequeue();  
    Console.WriteLine(zap2.Id + " " + zap2.Ime);  

    int komadaPoslePrvogDequeue = redZaposlenih.Count;  
    Console.WriteLine("U redu je posle drugog Dequeue bilo {0}", komadaPoslePrvogDequeue);  

    #endregion  

    #region foreach petlja  

    foreach (Zaposleni zap in redZaposlenih)  
    {  
      Console.WriteLine(zap.Id + " " + zap.Ime);  
    }  
    #endregion  

    #region peek metoda

   int komadaPrePeek = redZaposlenih.Count();  
    Console.WriteLine("Koliko ih je pre Peek :  {0}", komadaPrePeek);  

    Zaposleni zaposleniPeek = redZaposlenih.Peek();  
    Console.WriteLine(zaposleniPeek.Ime);  

    int komadaPoslePeek = redZaposlenih.Count();  
    Console.WriteLine("Koliko ih je nakon Peek : {0}", komadaPoslePeek);  

    #endregion  
  }  
}

Zanimljivost: Kada se koristi #region i završi sa #endregion, taj deo se u editoru može "skupiti" ili ponovo staviti u fokus sa "+" ili "-", radi bolje preglednosti

Naravno, ako radite u Vizual Studiju, na kraju dodajte Console.ReadKey();






Last modified: Sunday, 13 October 2024, 9:28 PM