gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
sort zad1, cr/lf fix
[spa2-materijali.git] / Hash / hash.txt
index 75e8cc7..d9cdb18 100644 (file)
@@ -152,11 +152,16 @@ tabele sa 503 mesta i oko 10\% za 997 mesta.
 Slično važi i za prezimena, budući da ih ima samo šestdesetak, bez
 obzira na koliko je dobar heš kod u klasi `String`, možemo imati samo
 šestdesetak različitih rezultata, odnosno dobijamo još gore rezultate,
-čak i za relativno malu tabelu sa 101 podskupom.
+čak i za relativno malu tabelu sa 101 podskupom. Ovde treba obratiti
+pažnju i da je moguće da imamo `null` polje.
 
 ```Java
     public int hashCode() {
-        return prezime.hashCode();
+        if (prezime != null) {
+            return prezime.hashCode();
+       } else {
+           return 0;
+       }
     }
 ```
 
@@ -181,7 +186,12 @@ jednostavno samo sabrati:
 
 ```Java
        public int hashCode() {
-               return prezime.hashCode() + broj;
+               int rez = 0;
+               if (prezime != null) {
+                       rez += prezime.hashCode();
+               }
+               rez += broj;
+               return rez;
        }
 ```
 
@@ -211,7 +221,12 @@ Na primer
 
 ```Java
        public int hashCode() {
-               return prezime.hashCode() * broj;
+               int rez = 1;
+               if (prezime != null) {
+                       rez *= prezime.hashCode();
+               }
+               rez *= broj;
+               return rez;
        }
 ```
 
@@ -283,12 +298,19 @@ Potpuna verzija bi izgledala ovako:
 
                // pretvaramo objekat u kancelariju
                Kancelarija k2 = (Kancelarija) o;
-               // poredimo polja
-               if (prezime.equals(k2.prezime) && broj == k2.broj) {
-                       return true;
+
+               // Prvo proveravamo broj
+               if (broj != k2.broj) {
+                   return false;
                }
 
-               return false;
+               // A potom prezime
+               if (!Objects.equals(prezime, k2.prezime)) {
+                   return false;
+               }
+
+               // Proverili smo polja i sva su jednaka
+               return true;
        }
 ```
 
@@ -355,14 +377,23 @@ Funkcija jednakosti bi izgledala ovako:
                }
 
                Gadjanje o2 = (Gadjanje) o;
-               if (o2.rezultati.length == rezultati.length) {
-                       for (int i = 0; i < rezultati.length; i++) {
-                               if (o2.rezultati[i] != rezultati[i])
-                                       return false;
+               // proveravamo da li je polje null pre dalje provere
+               if (rezultati != null && o2.rezultati != null) {
+                       if (o2.rezultati.length == rezultati.length) {
+                               for (int i = 0; i < rezultati.length; i++) {
+                                       if (o2.rezultati[i] != rezultati[i]){
+                                               // cim je nesto razlicito nisu isti
+                                               return false;
+                                       }
+                               }
+                               // ako se sve vrednosti slazu isti su
+                               return true;
                        }
-                       return true;
+                       return false;
+               } else {
+                       // vracamo da li su oba null, tj da li su jednaki
+                       return (rezultati == null && o2.rezultati == null);
                }
-               return false;
        }
 ```
 
@@ -399,8 +430,10 @@ prvim elementima.
 ```Java
        public int hashCode() {
                int rez = 0;
-               for (int i = 0;i < rezultati.length; i++) {
-                       rez = (rez + rezultati[i] * (MAX_DUZ+1-i)) * 7;
+               if (rezultati != null) {
+                       for (int i = 0; i < rezultati.length; i++) {
+                               rez = (rez + rezultati[i] * (MAX_DUZ + 1 - i)) * 7;
+                       }
                }
                return rez;
        }
@@ -464,7 +497,11 @@ elemente matrice, na primer:
                if (getClass() != o.getClass()) {
                        return false;
                }
+
+               // menjamo tip da mozemo da poredimo
                XO o2 = (XO) o;
+               // posto je u ovoj klasi uvek inicijalizovano polje table
+               // i uvek je DIM x DIM ne moramo proveravati null
                for (int i = 0; i < DIM; i++) {
                        for (int j = 0; j < DIM; j++) {
                                if (o2.tabla[i][j] != tabla[i][j]) {
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner