Kezdőoldal » Számítástechnika » Programozás » Javaban ezt hogyan lehet...

Javaban ezt hogyan lehet megoldani?

Figyelt kérdés

Legyen adott egy osztály, pl:

public class Test{

int a;

int b;

int c;

}


és én azt mondom, hogy két ilyen egyezzen meg - feltéve, hogy test1 és test2 Test típusú objektumok - ha test1.a == test2.a.


Hogyan tudnám ezt a program számára is "megmondani". Mármint arra értem, hogyha pl van egy HashSet<Test> objektumom, akkor ha már a test1 benne van, akkor a test2 ne kerüljön bele?


2016. dec. 26. 13:50
1 2
 11/15 A kérdező kommentje:
Így már értem, nagyon köszönöm! Rengeteget kell még tanulnom, irigyellek titeket.
2016. dec. 26. 22:58
 12/15 _Jessy_ ***** válasza:

#3 -hoz annyi kiegészítés, hogy this.b == obj.b vizsgálat miatt hibás lesz, mivel nem ez a feladat.

A hashCode() pedig azért hibás, mert az int típusnak nincs hashCode() metódusa.

Helyesen szerintem így kellene kinézzen a dolog:


class Test{

....int a;

....int b;

....int c;


....@Override

....public boolean equals(Object o) {

........return o instanceof Test && ((Test) o).a == this.a;

....}


....@Override

....public int hashCode() {

........return a;

....}

}

2016. dec. 27. 13:17
Hasznos számodra ez a válasz?
 13/15 _Jessy_ ***** válasza:

#7 Jogos az észrevétel, viszont nem a Java programozók dolga, hogy az "áttért" embereket megtanítsák a nyelvet használni, ezért a magyarázat ebben az esetben csak felesleges rizsa :)

Amúgy engem sem tanított senki, hogy a Java-ban nincs előjel nélüli egész és a '<<', '>>' operátorok az összes többi nyelvtől eltérően, eléggé kretén módon viselkednek. :)

2016. dec. 27. 13:25
Hasznos számodra ez a válasz?
 14/15 anonim ***** válasza:

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

Test test = (Test) o;

return a == test.a && b == test.b && c == test.c;

}


@Override

public int hashCode() {

return Objects.hash(a, b, c);

}


Megjegyzés:

- Az instanceof gyermek osztályokat is elfogad, ha azt szeretnéd hogy pontosan megegyezzen a két objektum típusa akkor getClass() kell az equals()-ba ahogy írtam.

- JDK7-től van Objects.hash amivel egyszerű implementálni a hashkódot. Manuális implementációra itt egy példa:


@Override

public int hashCode() {

int result = a;

result = 31 * result + b;

result = 31 * result + c;

return result;

}

2016. dec. 27. 22:30
Hasznos számodra ez a válasz?
 15/15 _Jessy_ ***** válasza:

"egyezzen meg - feltéve, hogy test1 és test2 Test típusú objektumok - ha test1.a == test2.a" - idézet a kérdezőtől.


return a == test.a && b == test.b && c == test.c;

helyett:

return a == test.a;

hasCode metódust meg mi a túrónak túlbonyolítani??? Azt érdemes az equals metódussal összhangban megírni. Itt pl. a

return this.a;

tökéletesen megfelel a célnak. Abszolút felesleges szükségtelen utasításokkal szaporítani a

2016. dec. 28. 12:11
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!