Värien tilastointi

tilastoja

Minulla on ArrayListissä Color-objekteja. Onko jollakulla mitään ideaa siitäsaisin tilastoitua kunkin värin esiintyvyyden?

5

487

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • värikäs?

      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

      • tilastoja

        Juu, täytynee tutkia. Viitsisitkö heittää vielä vähän koodia tuosta HashMapista?


      • tilastoja
        tilastoja kirjoitti:

        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?


      • tilastoja
        tilastoja kirjoitti:

        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


      • tilastoja
        tilastoja kirjoitti:

        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.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Vain vasemmistolaiset rakennemuutokset pelastavat Suomen

      Kansaa on ankeutettu viimeiset 30+ vuotta porvarillisella minäminä-talouspolitiikalla, jossa tavalliselta kansalta on ot
      Maailman menoa
      131
      3950
    2. Haluaisin rakastaa sinua

      Ja olla sinulle se oikea... Rakastan sinua 💗💗💗
      Ikävä
      19
      3455
    3. Purra on kantanut vastuuta täyden kympin arvoisesti

      Luottoluokituksen lasku, ennätysvelat ja ennätystyöttömyys siitä muutamana esimerkkinä. Jatkakoon hän hyvin aloittamaans
      Maailman menoa
      17
      3397
    4. onko kaivattusi

      vaarallinen? :D
      Ikävä
      79
      3337
    5. Persut huutaa taas: "kato! muslimi!"

      Persut on lyhyessä ajassa ajaneet läpi kaksi työntekijöiden oikeuksien heikennystä, joita se on aiemmin vastustanut. Pe
      Maailman menoa
      61
      3244
    6. Tiedätkö mihin

      Ominaisuuksiin rakastuin sinussa?
      Ikävä
      49
      2991
    7. Menen nyt koisimaan

      Ja en ehkä palaa tänne. Asia on nyt loppuunkäsitelty ja totuus tuli ilmi
      Ikävä
      29
      2905
    8. Olisiko sinulla

      Jonossa vaihtoehtoja, ehkä
      Ikävä
      54
      2657
    9. Pieni galluppi

      Mitäs lahjaa odotat joulupukilta.
      Ikävä
      74
      2628
    10. Mitä tuntemuksia

      Rakkaasi ääni herättää?
      Ikävä
      19
      2377
    Aihe