Collection di JTextField

di il
17 risposte

17 Risposte - Pagina 2

  • Re: Collection di JTextField

    TheRT0C ha scritto:


    non facciano parte della stessa decina.
    Ecco, partiamo da questo, che è chiaro perlomeno come senso generale. Se tu estai una combinazione di 6 numeri, non vuoi che se viene estratto es. 4, nessun altro numero 1..9 (la prima decina) venga più estratto PER QUELLA combinazione. Giusto?
    Questo sì, potrebbe essere ragionevole/sensato MA devi chiarire innanzitutto quanto vuoi estrarre.

    Cioè: hai il classico "sacchetto" con 90 numeri e vuoi estrarre combinazioni di 6 numeri per volta (con la logica detta sopra), togliendo materialmente dal sacchetto ciascun numero estratto? Allora al massimo estrai 15 combinazioni. Punto, poi stop, basta. Questo si può fare.

    Oppure vuoi ragionare a livello più teorico: quante/quali combinazioni puoi generare in tutto da 90 numeri (sempre con la logica detta sopra)? Anche questo è sicuramente fattibile ma l'approccio sarebbe differente.

    TheRT0C ha scritto:


    quanto spazio occupa? quanto costa un'istanza di una classe con parametro ArrayList in termini di spazio? e quanto spazio occupa un ArrayList di 20mln di istanze.
    No, non ha senso ragionare subito così. Non devi pensare allo spazio occupato ma alla logica/algoritmo da usare!
  • Re: Collection di JTextField

    Hai ragione, con Java tendo a ragionare meno con gli algoritmi.

    Si partiamo dal caso più facile, estraggo i seguenti numeri senza reinserimento: 1,2,3,4,5 e non voglio che il prossimo sta nella decina 1-10. Il Calcolo combinatorio risulta essere dunque semplice ( 10!/(10-5)! * 5! ) * (80!/(80-1)! + 1!) = 20160 combinazioni nel mio esempio(moltiplicare per 9 se vogliamo tutte le combinazioni di ogni decina).
    La conversione in java potrebbe essere questa:
       List<Scheda> combination = generate(1,10,5); // genera le combinazioni in raggruppamenti di 5 nell'intervallo [1,10]
          
                for(Scheda scheda : combination){
                    ArrayList<Integer> temp;
                    for(int j=11;j<91;j++){
                        temp=scheda.getScheda(); temp.add(j);
                        permutations.add(new Scheda(temp));
                    }
                }

    tutte le combinazioni invece:
    for(int i=1;i<=81;i=i+10){
                List<Scheda> combination = generate(i,i+10,5);
                for(Scheda scheda : combination){
    
                    ArrayList<Integer> temp=new ArrayList<>();
                    for(int j=i+10;j<91;j++){
                        temp=scheda.getScheda(); temp.add(j);
                        permutations.add(new Scheda(temp));
                    }
                    for(int j=1;j<i;j++){
                        temp=scheda.getScheda(); temp.add(j);
                        permutations.add(new Scheda(temp));
                    }
                }
            }
  • Re: Collection di JTextField

    TheRT0C ha scritto:


    Ma tralasciando questo pallino notturno, sono più curioso nel capire quanto spazio occupa? quanto costa un'istanza di una classe con parametro ArrayList in termini di spazio? e quanto spazio occupa un ArrayList di 20mln di istanze.
    ArrayList utilizza un riferimento ad ogni oggetto che contiene, solitamente 4 B.
    Quindi siamo intorno agli 80 MB solo di riferimenti, se poi le tue istanze contendono altri riferimenti sono altri 4B ognuno, i parametri dipende dal tipo ( char, int e float 4 B, long e double 8 B, etc etc ognuno).

    Insomma, se teoricamente una tua classe contenesse diciamo tre riferimenti e quattro int, ha bisogno di 28 B di memoria. Quindi lo spazio occupato dall'ArrayList rimarrebbe 80MB, ma poi hai 560 MB di istanze della tua classe. Chiaramente si "arrotonda per difetto", altre zone di memoria sono occupate da degli oggetti della JVM che servono durante l'esecuzione.

    In conclusione, siamo quasi ad un GB.
Devi accedere o registrarti per scrivere nel forum
17 risposte