Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Java - hledání duplicit v poli - Optimalizace kódu

Dobrý den,

V podstatě to navazuje na 1769795-java-hledani-duplicit-v-poli

Akorát teď mám následující kód.

public void check_diffrents(ObjectArrayList<Player> color_player, int number) {
        ObjectOpenHashSet hash = new ObjectOpenHashSet();
        for (int i = 0; i < number; i++) {
            hash.add(color_player.get(i).getFill());
        }
        setDisable(number != hash.size());
}

ObjectArrayList a ObjectOpenHashSet je to samé jako ArrayList a HashSet, akorát jsou to třídy extérní knihovny.

Tady porovnávám property objektů, takže nemůžu napsat.

ObjectOpenHashSet hash = new ObjectOpenHashSet(color_player);

Jenže počet porovnávaných prvků, určující proměnná number, nemůžu předem znát a proto to musím napsat do cyklu.

Existuje, prosím vás, nějaký optimálnější způsob, kde bych nemusel používat cyklus.

Děkuji

loading...
Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
A co tohle? public void check_diffrents(ObjectArrayList<Player> color_player, int number) { ObjectO…
MichalDM 13.10.2017 22:38
MichalDM
Pokud umi ta tvoje kolekce z externi knihovny streamy, tak se muzes na oko zbavit cyklu pri tvorbe t…
MaSo 14.10.2017 07:08
MaSo
Tak ještě jsem to upravil, poněvadž jsem to nedostatečně otestoval a teď jsem zjistil, že parametr n…
MichalDM 14.10.2017 23:15
MichalDM
Sice ses vyhnul cyklu, ale tipnul bych si, že jsi to tímhle ve skutečnosti o něco zpomalil.
Wikan 15.10.2017 08:58
Wikan
Ale no tak, beztak tam ma 10 prvku, o tolik pomalejsi to zas nebude...:-) Pokud ma 10 milionu, tak m…
MaSo 15.10.2017 09:03
MaSo
Pro 10 prvků nemá smysl optimalizovat ani úplně první zápis.
Wikan 15.10.2017 09:05
Wikan
Ja to chapal tak, ze chce hezci kod bez cyklu. Ne, ze ma problemy s performance... EDIT: ale ten ko… poslední
MaSo 15.10.2017 09:06
MaSo

A co tohle?

public void check_diffrents(ObjectArrayList<Player> color_player, int number) {
        ObjectOpenHashSet hash = new ObjectOpenHashSet();
        try {
          setDisable(false);
          for (int i = number - 1; ; i -= 1) {
            if (!hash.add(color_player.get(i).getFill())) {
               setDisable(true);
               break;
            }
          }
        } catch (ArrayIndexOutOfBoundsException e) {
        }   
}

Tak ještě jsem to upravil, poněvadž jsem to nedostatečně otestoval a teď jsem zjistil, že parametr number vůbec nepoužívám a proto to nefunguje 100% dobře.

public void check_diffrents(ObjectArrayList<Player> color, int number) {
        ObjectSet<Paint> pure_color = new ObjectOpenHashSet(color.stream().limit(number).map(Player :: getFill).collect(Collectors.toSet()));
        setDisable(pure_color.size() != number);
}

Zpět do poradny Odpovědět na původní otázku Nahoru

loading...