Minulla on ArrayListissä Color-objekteja. Onko jollakulla mitään ideaa siitäsaisin tilastoitua kunkin värin esiintyvyyden?
Värien tilastointi
tilastoja
5516
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 5
Vanhimmat
Eli HashMap. Jos väri ei löydy, sijoitetaan siihen 1. Muutoin lisätään. Ei pitäisi olla monimutkaista.
Suurilla kuvilla tämä voi viedä erittäin paljon muistia, ehkä noin 80 tavua jokaista erillaista väriä kohti. Color-luokka on vähintään 36 tavua, HashMap- entry 28 tavua (+ tyhjät solut taulukossa, HashMap yrittää muistaakseni pitää 50% käyttöastetta), Integer-objekti 16 tavua. Tavumäärät voivat heittää hieman, en laskenut niin tarkkaan, mutta lähellä niiden pitäisi olla. 64-bittisellä JVM:llä luultavasti lähemmäksi 120 tavua, näin hatusta heitettynä.
Jos värit ovat 8+8+8 bittisiä (sRGB yms. 24-bittiset) ja niitä on paljon, voi olla suorituskyvyn kannalta nopeampaa varata 2^24 taulukko int[256*256*"256] = 48 MB, jota indeksoidaan (red
Juu, täytynee tutkia. Viitsisitkö heittää vielä vähän koodia tuosta HashMapista?
Jos HashMap sisältää objektin Color, lisätään avaimeen yksi, mutta miten?
muuttujassa varit on väri-objektit. Miten saan lisättyä Integeriin yhden? Vai pitäisikö koko Integer korvata jollain muulla? Ongelma siis on seuraavan ehtolauseen jälkeen: if (y.containsKey(varit.get(x)) . Miten tästä jatketaan.
HashMap y = new HashMap();
for (int x=0;x
Oho, koodi katkesi kesken edellisessä viestissä. Tuli mieleeni, että jos arvon kasvattamiseksi yhdellä ei käy muutoin, kun luomalla joka kerta uusi Integer-objekti, on tämä selvää muistin haaskaamista. Pakko löytää tehokkaampi keino.