Véletlen tömb elemeit ismétlések nélkül, Elwood - s blog
Néha szükség van, hogy megoldja a következő probléma: van egy tömb, amiből véletlenszerűen kiválaszt egyesével. És meg kell győződnünk arról, hogy a kiválasztott terméket még egyszer mi nem találkoznak. A kézenfekvő megoldás a homlok - indul a következő szett, amelyben tárolni a kiválasztott elemeket, amelyeket akár saját azonosítókat - nem jó: nem csak, hogy szükség van a több memóriát használ, így is nincs garancia arra, hogy a következő elem megtalálható lesz azonnal. Minél jobban választani az elemeket, az már akkor meg kell keresni a következő, véletlenszerűen elem, amely még mindig hiányzik a beállított használni. Egy másik módja - elmozdulás a használt elemek egy másik gyűjtemény - működőképes, ha az eredeti gyűjtemény lehetővé teszi az eltávolítási művelet és ez végre hatékonyan. Ezért nem helyénvaló (eltávolítás egyszerűen nem), és ArrayList'ov is ki (távolítsa el a nem hatékony) tömbök. De láncolt lista fog működni önmagában is elég szép. Zavaros csak az, hogy nem az eredeti állapot visszaállítására befejezése után a gyűjtemény az algoritmust. Akkor könnyebb másolni az egész eredeti gyűjteményt, és távolítsa el az elemeket. De ez nem így van, ha a gyűjtemény nagy, és az elemek szükségünk, csak egy tucat.
Általában használja a katona hozzáértés, és adja meg a következő algoritmus: Minden következő választható tárgy megváltoztatjuk az utolsó elem a tömb, és csökkenti a hossza a tömb a készülékben használt. Végén a tömb így felhalmozódnak „használt” elemeket. És annak érdekében, hogy fenntartsák a képesség, hogy visszatérjen az eredeti állapotába, közel a ArrayList rögzíti az eredeti indexek használt elemeket.
Valójában, írtam egy osztályt, amely megvalósítja ezt az ötletet, és megállapította, hogy hasznos, idézek a kódot.