public class MultiInsiemeIllimitato2 extends MultiInsiemeIllimitato /* questa classe e' stata modificata rispetto alla classe MultiInsieme, migliorando le prestazioni per il calcolo della varianza e aggiungendo due metodi per l'eliminazione di elementi */ { /* e' stata aggiunta questa variabile istanza */ private int sommaElementi; private long sommaQuadrati; /* il costruttore azzera anche la nuova variabile */ public MultiInsiemeIllimitato2(int dimensione) { super(dimensione); // CHIAMATA A MULTIINSIEME(dimensione) sommaElementi = 0; sommaQuadrati = 0; } /* aggiungiElemento incrementa anche la nuova variabile */ public void aggiungiElemento(int x) { super.aggiungiElemento(x); sommaElementi += x; sommaQuadrati += (long)x*x; } public double media() { return (double)sommaElementi/numElementi(); } /* il metodo varianza() applica la nota espressione */ public double varianza() { double var = sommaQuadrati/numElementi() - media()*media(); return var; } public void eliminaTuttiElementi(int x) { int indiceZonaPiena=0; /* la variabile i scandisce l'array, la variabile indiceZonaPiena indica invece la prima posizione disponibile per copiare gli elementi diversi da x */ for (int i = 0; i < numElementi(); i++) { if (valori[i]!=x) { valori[indiceZonaPiena] = valori[i]; indiceZonaPiena++; } else { sommaElementi -= x; sommaQuadrati -= x*x; } } size = indiceZonaPiena; } }