14.10.21

Java - HashSet

Besplatni Java kurs - 49. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

HashSet bi se moglo prevesti kao skup heš vrednosti ili heš skup. Heš vrednosti su vrednosti koje nastaju primenom heš funkcija na ulazne vrednosti. Heš funkcije su tema za sebe i potrebo je više prostora za opisivanje svih pojedinosti koje su neophodneza potpuno razumevanje, ali pokušaću da objasnim ukratko, samo osove koje su neophodne za razumevanje heš skupova.

Heš funkcije

Kao i svaka druga matematička funkcija, heš funkcija (f) preobražava ulaznu vrednost (x) u izlaznu vrednost (y). Jedna od najjednostavnijih heš funcija je ostatak pri deljenju. Uzmimo za primer da je naša heš funcija ostatak pri deljenju brojem 10. Hajde da primenimo našu funkciju na nekoliko ulaznih vrednosti:

1. slučaj
f = ostatak pri deljenju brojem 10
x = 15
f(x) = f(15) = ostatak deljenja broja 15 brojem 10 = 5
znači rešenje je:
y = 5

2. slučaj
f = ostatak pri deljenju brojem 10
x = 23
f(x) = f(23) = ostatak deljenja broja 23 brojem 10 = 3
i rešenje je:
y = 3

3. slučaj
f = ostatak pri deljenju brojem 10
x = 195
f(x) = f(195) = ostatak deljenja broja 195 brojem 10 = 5
rešenje je (ponovo):
y = 5

Iz primera se može zaključiti nekoliko stvari:
  • heš funkciju je moguće primeniti na beskonačan broj ulaznih vrednosti
  • heš funkcija može dati isti rezultat za različite ulaze (u našem primeru prvi i treći slučaj imaju isto rešenje: i za x = 15 i za x = 195 rešenje je 5)
  • nemoguće je zaključiti koja vrednost je bila ulazna vrednost heš funkcije na osnovu rezultata (u našem primeru, kada imamo rešenje 5 ne možemo znati da li je na ulazu bilo 15, 195 itd.)

Ove tri osobine treba imati na umu pri radu sa heš skupovima, ali i pri radu sa bilo kojom drugom heš kolekcijom - kako u Javi, tako i u drugim programskim jezicima.

Skupovi heš vrednosti predstavljaju Java kolekcije koje sadrže jedinstvene elemente i veoma su brzi za pretragu. Java skupovi heš vrednosti se koriste upotrebom metoda klase HashSet.

30.9.21

Java - EnumSet

Besplatni Java kurs - 48. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

EnumSet bi u prevodu na naš jezik značilo skup nabrajanja. Skupovi nabrajanja su Java kolekcije koje mogu sadržati nijedan, jedan ili više elemenata nabrajanja. Java skupovi nabrajanja se stvaraju upotrebom metoda klase EnumSet.

Java EnumSet - Upotreba

Najpre je neophodno uvesti EnumSet iz paketa java.util na sledeći način:

import java.util.EnumSet;

Zatim je potrebno napraviti nabrajanje. Iskoristićemo primer iz prethodnog dela kursa:

enum DanUNedelji {
    PONEDELJAK,
    UTORAK,
    SREDA,
    CETVRTAK,
    PETAK,
    SUBOTA,
    NEDELJA
}

Konačno sve je spremno za stvaranje skupova nabrajanje od nabrajanja DanUNedelji

Stvaranje skupa nabrajanja

Ako je potrebno napraviti skup koji će sadržati sve elemente nabrajanja DanUNedelji, koristi se metoda allOf():

EnumSet<DanUNedelji> sviDaniUNedelji;
sviDaniUNedelji = EnumSet.allOf(DanUNedelji.class);

31.8.21

Java 17 stiže za dve nedelje!

Pročitaj i ostale Java vesti.

Za oko dve nedelje (14. sep. 2021.) trebalo bi da izađe Java 17 - najnovija verzija programskog jezika Java. To će biti prva verzija posle verzije 11 koja će imati dugoročnu podršku. Besplatna dugoročna podrška trajaće bar do septembra 2027. god.

Java 17 sa sobom donosi četrnaest poboljšanja:

  • Restore Always-Strict Floating-Point Semantics - JEP 306
  • Enhanced Pseudo-Random Number Generators - JEP 356
  • New macOS Rendering Pipeline - JEP 382
  • macOS/AArch64 Port - JEP 391
  • Deprecate the Applet API for Removal - JEP 398
  • Strongly Encapsulate JDK Internals - JEP 403
  • Pattern Matching for switch (Preview) - JEP 406
  • Remove RMI Activation - JEP 407
  • Sealed Classes - JEP 409
  • Remove the Experimental AOT and JIT Compiler - JEP 410
  • Deprecate the Security Manager for Removal - JEP 411
  • Foreign Function & Memory API (Incubator) - JEP 412
  • Vector API (Second Incubator) - JEP 414
  • Context-Specific Deserialization Filters - JEP 415

13.7.21

Java - Enums

Besplatni Java kurs - 47. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Enums ili enumeracije(nabrajanja) su posebna vrsta Java kolekcija koja predstavlja grupu konstanti. Java enumeracije se stvaraju upotrebom ključne reči enum nakon koje slede naziv i konstante.

Enums - Upotreba

Java nabrajanja se mogu koristiti neposredno, bez uvođenja paketa:

Stvaranje Enumeracije

Nabrajanja se mogu koristiti za grupisanje konstanti, npr. naziva dana u nedelji:

enum DanUNedelji {
    PONEDELJAK,
    UTORAK,
    SREDA,
    CETVRTAK,
    PETAK,
    SUBOTA,
    NEDELJA
}

Konstantne vrednosti iz enumeracije se se mogu mogu dodeljivati promenljivama čiji je tip data enumeracija, bez upotrebe ključne reči new:

DanUNedelji dan = DanUNedelji.PETAK;


Pročitaj i nastavak:

Besplatni Java kurs - 48. deo - EnumSet

30.6.21

Java - ArrayDeque

Besplatni Java kurs - 46. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Array Deque je Java kolekcija iz paketa java.util koja predstavlja niz - red sa dva kraja, otuda i naziv (na engleskom: Array Double Ended Queue). Kao što se iz naziva može zaključiti, ArrayDeque je red koji omogućava dodavanje i uklanjanje članova na oba kraja.

Korišćenje ArrayDeque

Pre upotrebe potrebno je uvesti paket u kome se nalazi ArrayDeque:

import java.util.ArrayDeque;

Stvaranje ArrayDeque

Red sa dva kraja se stvara pomoću ključne reči new:

ArrayDeque<String> mojiOmiljeniStraniJezici = new ArrayDeque<String>();

29.6.21

Java - LinkedList

Besplatni Java kurs - 45. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

Linked List je još jedna od često korišćenih Java kolekcija iz paketa java.util. Na našem jeziku, linked list se može prevesti kao povezana lista. Povezane liste su linearna struktura podataka čiji članovi nisu uskladišteni u neprekidnom nizu memorijskih adresa, već mogu biti skladišteni na različitim mestima. Svaki član povezane liste sadrži dva dela: podatak i adresu narednog člana. Kao što je već pomenuto, LinkedList je deo java.util paketa koji se prvo mora uvesti i tek onda je moguće koristiti ArrayList.

Uvođenje LinkedList

Najpre je potrebno uvesti paket u kome se nalaze povezane liste. Nije nužno uvesti ceo paket, već samo LinkedList:

import java.util.LinkedList;

Stvaranje LinkedList

Nova povezana lista se stvara pomoću ključne reči new:

LinkedList<String> mojiOmiljeniSportovi = new LinkedList<String>();

31.5.21

Java - ArrayList

Besplatni Java kurs - 44. deo
Ovo je samo jedan od članaka koji zajedno čine besplatan Java tutorijal.

ArrayList je jedna od najčešće korišćenih Java kolekcija. Po svoj prirodi, ArrayList je niz promenljive dužine. To je ujedno i najbitnija razlika u odnosu na osnovne, ugrađene Java nizove. Za razliku od ugrađenih nizova koji se mogu koristiti bez dotatnih priprema, ArrayList je deo java.util paketa koji se prvo mora uvesti i tek onda je moguće koristiti ArrayList.

Uvođenje ArrayList u program

Pre svega, prvo je potrebno uvesti paket. Da bi bilo moguće koristiti ArrayList nije neophodno uvesti ceo paket, već samo ArrayList na sledeći način:

import java.util.ArrayList;

Stvaranje ArrayList

Slično nizu, novi ArrayList objekat se stvara pomoću ključne reči new:

ArrayList<String> mojeOmiljeneDestinacije = new ArrayList<String>();

29.3.21

Java 16 - Šta je novo?

Pročitaj i ostale Java vesti.

Nedavno je objavljena najnovija verzija (16) programskog jezika Java. Java 16 nema dugoročnu podrške. Sledeća verzija (17) će biti objavljena u septembru ove godine i imaće dugoročnu podršku.

Java 16 je stigla sa sledećim promenama:

  • Vector API (Incubator) - JEP 338
  • Enable C++14 Language Features - JEP 347
  • Migrate from Mercurial to Git - JEP 357
  • Migrate to GitHub - JEP 369
  • ZGC: Concurrent Thread-Stack Processing - JEP 376
  • Unix-Domain Socket Channels - JEP 380
  • Alpine Linux Port - JEP 386
  • Elastic Metaspace - JEP 387
  • Windows/AArch64 Port - JEP 388
  • Foreign Linker API (Incubator) - JEP 389
  • Warnings for Value-Based Classes - JEP 390
  • Packaging Tool - JEP 392
  • Foreign-Memory Access API (Third Incubator) - JEP 393
  • Pattern Matching for instanceof - JEP 394
  • Records - JEP 395
  • Strongly Encapsulate JDK Internals by Default - JEP 396
  • Sealed Classes (Second Preview) - JEP 397