Množica (računalništvo)

Iz MaFiRaWiki

(Preusmerjeno iz Množice)
GFDL Avtor tega članka je študent/ka EvelinaKudrevičius.

Pripravil/a ga je pri predmetu Računalništvo 2 (FMF PRA).


Kljub temu ste vsi vabljeni k urejanju in popravkom, saj je bistvo wikija ravno v sodelovalnem delu.

Vsebina

Kaj je množica v računalništvu?

Množica je primer zbirke, ki ne more vsebovati podvojnih elementov. Opisuje jo vmesnik Set, v Javini knjižnjici pa najdemo tudi dve njegovi izvedbi : HashSet in TreeSet.Prva zagotavlja najbolj učinkovito izvedbo neurejene množice za splošno rabo, druga pa vanjo shranjene podatke samodejno ureja po abecedi, čeprav ni tako učinkovita kot prva izvedba.

Zgled uporabe

Oglejmo si zgled, ki v zbirko shrani vse nize ukazne vrstice. Množica nam omogoča, da izločimo dvojnike in na koncu izpišemo le enolične elemente.

 
import java.util.*;
 
public class Dvojniki {
  public static void main(String args[]){
      Set mnozica = new HashSet(); 
      for(int i = 0;i<args.length; i++){
           if(!mnozica.add(args[i])){//če dodajanje ne spremeni same zbirke
           System.out.println("Najdeni dvojnik : "+args[i]);
           }
       }
      System.out.println("Našli smo "+ mnozica.size()+" enoličnih besed : " + mnozica);
 
   }
}

Če program prevedemo in poženemo z naslednjo ukazno vrstico:

 
>java Dvojniki Gori na gori gori

dobimo izpis:

 
Najdeni dvojnik : gori
Našli smo 3 enoličnih besed  : [gori, na, Gori]

Zbirke se lepo pretvarjajo v niz, ki izpiše vse vsebovane elemente.

Podatkovni tip zbirke smo v kodi določili z vmesnikom in ne z dejanskim razredom, ki vmesnik izdela. Zato smo napisali Set mnozica = new HashSet();. To je priporočljivo, saj koda ostaja prilagodljiva. Izvedbo množice tako lahko preprosto zamenjamo s spremembo konstruktorja, preostanek kode pa ostane enak.

Torej če sedaj namesto Set mnozica = new HashSet(); v isto kodo napišemo Set mnozica = new TreeSet(); in program enako poženemo:

 
>java Dvojniki Gori na gori gori

dobimo izpis

 
Najdeni dvojnik : gori
Našli smo 3 enoličnih besed : [Gori, gori, na]

Vidimo, da izpiše enake besede, le vrstni red je drugačen, saj jih TreeSet() uredi po abecedi.

Uporaba vmesnikov

Ločevanje kode od dejanske izvedbe, torej uporaba vmesnikov kjerkoli je le mogoče, znatno olajša vzdrževanje kode in kasnejše prilagajanje, odpravlja pa tudi skušnjavo po izkoriščanju posebnih razširitev, vsebovanih v izvedbenem razredu, ki niso del vmesnika, kar praktično onemogoča kasnejšo zamenjavo razreda, če ugotovimo, da slednji nenadoma ni več primeren.

Metode množic

Naslednje metode na množicah predstavljajo standardne operacije med njimi:

  • ugotavljanje podmnožice: mnozica1.containsAll(mnozica2);
  Ta metoda vrača true, če je mnozica2 podmnozica mnozice1 in false, če ni.
  • unijo: mnozica1.addAll(mnozica2);
  Ta metoda vrača false, če dodajamo množici1 prazno množico2.
  V tem primeru ostane množica1 nespremenjena, množica2 pa tudi (še vedno je prazna).
  Če pa je množica2 neprazna, pa ta metoda vrne true in množici1 doda tiste elemente množice2, ki jih množica1 še nima. 
  Metoda vrne true tudi v primeru, če je množica1 prazna. Tako ji po klicu te metode doda vse elemente množice2. 
  • presek: mnozica1.retainAll(mnozica2);
  Ta metoda vrne true, če jo pokličemo na dveh množicah, množica1 mora biti nujno neprazna. Pri klicu te metode 
  se spremeni množica1 v ta presek (elementi mnozice1 so elementi preseka mnozice1 in mnozice2).Množica2 pa ostane nespremenjena.
  Tako je tudi, če imata množici različne elemente ali če je množica2 prazna (množica1 pa neprazna)(tako postane množica1 prazna,
  saj je njun presek prazen, metoda pa vrne true).
  Če pa je množica1 prazna, potem metoda vrne false,obe množici pa ostaneta nespremenjeni.
  • razliko: mnozica1.removeAll(mnozica2);
 Razlika množic pomeni elemente množice1 brez tistih elementov, ki so tudi v množici2. 
 Oziroma to je množica1 brez preseka množice1 in množice2.
 Ta metoda vrne true, če je množica2 podmnožica množice1 in tako ostanejo v množici1 le tisti elementi, ki niso isti tistim  
 v množici2.
 Če pa sta množici različni,če je množica1 ali množica2 prazna ali pa če sta obe prazni,
 pa metoda vrne false, množici pa ostaneta nespremenjeni.
Osebna orodja