Utilizzando Piccoli (da 1 a 10 Elementi) a Livello di Istanza Collezioni in Java

StackOverflow https://stackoverflow.com/questions/57145

  •  09-06-2019
  •  | 
  •  

Domanda

Mentre la creazione di classi in Java mi trovo spesso a creare a livello di istanza collezioni che io sappia in anticipo di tempo sarà molto piccola - il meno di 10 elementi della collezione.Ma non so il numero di elementi in anticipo in modo che io di solito optare per un insieme dinamico (ArrayList, Vettoriali, ecc).

class Foo
{
  ArrayList<Bar> bars = new ArrayList<Bar>(10);
}

Una parte di me continua fastidioso a me che è uno spreco usare complessi insiemi dinamici per qualcosa di così piccole dimensioni.C'è un modo migliore di implementare qualcosa di simile a questo?O è la norma?

Nota, io non sono colpita (evidente) prestazioni di sanzioni o qualcosa di simile.Questo è solo mi chiedo se non c'è un modo migliore di fare le cose.

È stato utile?

Soluzione

Il ArrayList classe in Java ha solo due membri di dati, un riferimento a un Object[] matrice e una dimensione che è necessario in ogni caso, se non si utilizza un ArrayList.Quindi l'unico vantaggio di non uso di un ArrayList è il salvataggio di un oggetto di assegnazione, che è improbabile per essere un grande affare.

Se si sta creando e smaltimento di molte, molte istanze della classe contenitore (e, per estensione, il ArrayList esempio) ogni secondo, si potrebbe hanno un piccolo problema con la procedura di garbage collection churn—ma che è qualcosa di cui preoccuparsi se si verifica mai.Garbage collection è in genere l'ultima delle tue preoccupazioni.

Altri suggerimenti

Per il bene di mantenere le cose semplici, credo che questo è praticamente un non-problema.L'implementazione è abbastanza flessibile che se i requisiti di cambiare in futuro, non si è costretti in un refactoring.Inoltre, l'aggiunta più logica per il codice per una soluzione ibrida, semplicemente non vale la pena di prendere in considerazione il vostro piccolo insieme di dati e di alta qualità di Java API per la Raccolta.

Google Collezioni ha collezioni ottimizzato per immutabile/piccolo numero di elementi.Vedere Lists.asList API come un esempio.

L'overhead è molto piccolo.È possibile scrivere un ibrido elenco di matrice che contiene i campi per i primi elementi, e poi torna a utilizzare un array per elenco più lungo.

È possibile evitare il sovraccarico dell'elenco oggetto interamente utilizzando una matrice.Per andare ancora di più hardcore, si può dichiarare un campo come Oggetto, e di evitare la matrice del tutto per un singolo elemento.

Se la memoria è davvero un problema, si potrebbe desiderare di dimenticare utilizzando istanze di oggetti a basso livello.Invece di usare una grande struttura di dati in un grande livello di granularità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top