A Set egy rendezetlen gyűjtemény, amely a List-tel ellentétben garantáltan nem tartalmaz ismétlődő értékeket.
A Set interfész generikus típusparamétere a Set-ben tárolt elemek típusát jelöli:
Set<Integer> ints = Set.of(1, 2, 3);
Set<String> strings = Set.of("alpha", "beta", "gamma");
Set<Object> mixed = Set.of(1, false, "foo");
Figyelj rá, hogy a Set.of() metódus egy módosíthatatlan Set példányt hoz létre.
Ha olyan metódusokat próbálsz meghívni ezen a példányon, mint az add vagy a remove, az futásidőben kivételt eredményez.
Egy módosítható Set létrehozásához olyan osztályt kell példányosítanod, amely implementálja a Set interfészt.
A leggyakrabban használt beépített osztály, amely implementálja ezt az interfészt, a HashSet osztály.
Set<Integer> ints = new HashSet<>();
A Set interfész a Collection és az Iterable interfészből származik, ezért sok metódust oszt meg más gyűjteménytípusokkal.
A Collection interfészhez képest figyelemre méltó különbség viszont, hogy az olyan metódusok, mint az add és a remove, boolean értékkel térnek vissza (void helyett), ami megmutatja, hogy az elem benne volt-e a halmazban a metódus meghívásakor:
Set<Integer> set = new HashSet<>();
set.add(1);
// => true
set.add(2);
// => true
set.add(1);
// => false
set.size();
// => 2
set.contains(1);
// => true
set.contains(3);
// => false
set.remove(3);
// => false
set.remove(2);
// => true
set.size();
// => 1
A Blorkemon™️-kártyák iránti nosztalgiád egyáltalán nem lankad, sőt már újra gyűjteni is kezdted őket, és a barátaidat is ráveszed, hogy csatlakozzanak hozzád.
Ebben a feladatban a Set interfészt használod majd, hogy segítsen kezelni a gyűjteményedet, hiszen a duplikált kártyák nem számítanak, amikor a célod az összes létező kártya megszerzése.
Épp most találtad meg a régi Blorkemon™️-kártya-rejtekhelyedet! A rejtekhelyen egy csomó duplikált kártya van, szóval itt az idő, hogy egy új gyűjteményt kezdj a duplikátumok eltávolításával.
Nagyon szeretnéd, ha a barátaid is beszállnának a Blorkemon™️-őrületbe, és erre a legjobb mód, ha beindítod a gyűjteményüket azzal, hogy adsz nekik egy kártyát.
Valósítsd meg a newCollection metódust, amely a kártyák listáját egy Set-té alakítja, ami az új gyűjteményedet képviseli.
GottaSnatchEmAll.newCollection(List.of("Newthree", "Newthree", "Newthree"));
// => {"Newthree"}
Amint van egy gyűjteményed, az élni kezdi a saját életét, és növekednie kell.
Valósítsd meg az addCard metódust, amely egy új kártyát és a jelenleg gyűjtött kártyáid halmazát kapja.
A metódusnak hozzá kell adnia az új kártyát a gyűjteményhez, ha az még nincs benne, és egy boolean értékkel kell visszatérnie, amely megmutatja, hogy frissült-e a gyűjtemény.
Set<String> collection = GottaSnatchEmAll.newCollection("Newthree");
GottaSnatchEmAll.addCard("Scientuna",collection);
// => true
collection.contains("Scientuna");
// => true
Nagyon szeretnéd, ha a barátaid is beszállnának a Blorkemon™️-őrületbe, szóval itt az idő, hogy elkezdj kereskedni!
Amikor barátokkal kereskedel, nem minden csere éri meg, vagy egyáltalán nem is lehetséges. Csak akkor kereskedj, ha te és a barátod is rendelkeztek egy olyan kártyával, amivel a másik nem.
Valósítsd meg a canTrade metódust, amely a jelenlegi gyűjteményedet és az egyik barátod gyűjteményét kapja.
A fenti szabályok szerint egy boolean értékkel kell visszatérnie, amely megmutatja, hogy lehetséges-e a csere.
Set<String> myCollection = Set.of("Newthree");
Set<String> theirCollection = Set.of("Scientuna");
GottaSnatchEmAll.canTrade(myCollection, theirCollection);
// => true
Te és a Blorkemon™️-rajongó barátaid összegyűltök, és azon töprengtek, melyik kártyák a leggyakoribbak.
Valósítsd meg a commonCards metódust, amely gyűjtemények listáját kapja, és visszaad egy gyűjteményt azokból a kártyákból, amelyek minden gyűjteményben megtalálhatók.
GottaSnatchEmAll.commonCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Scientuna"}
Megvan neked és a barátaidnak együtt az összes Blorkemon™️-kártya?
Valósítsd meg az allCards metódust, amely gyűjtemények listáját kapja, és visszaad egy gyűjteményt az összes gyűjteményben előforduló összes különböző kártyából.
GottaSnatchEmAll.allCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Newthree", "Scientuna"}
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Java nyelvet 26 fogalom158 feladat segítségével, valódi emberi mentorálással, mindez ingyen.