2011-02-15 11 views
8

Estoy llamando a un método en otra API que acepta un java.util.Collection de objetos. Miré el método e inmediatamente copia todo en la colección en un nuevo ArrayList antes de realizar su tarea.java.util.Collection con la sobrecarga más baja?

Esto me hizo preguntarme: ¿Cuál es la colección Java más baja absoluta que puedo usar para ensamblar rápidamente los parámetros de este método?

Respuesta

6

Eso depende de cómo se copian los elementos, pero si se crea la -copy ArrayList como esto

new ArrayList<Something>(inputCollection); 

o si lo hace

someCopy.addAll(inputCollection); 

entonces el que pasará a través de la cual inputCollection.toArray() probablemente sea mejor implementado por ArrayList.

+2

+1 buena respuesta. Incluso si no se usa .toArray(), la otra opción es un tipo de iterador e iterar a través de una matriz (el almacenamiento subyacente en ArrayList) es más rápido que cualquier otra cosa. Entonces ArrayList es el ganador en cualquier caso. – rfeak

+0

para un mejor uso de ArrayList, pre-dimensione al construirlo, p. 'new ArrayList (numItems)'. – jtahlborn

+0

@jtahlborn: No veo cómo eso podría ayudar. Si usa el enfoque de constructor ya se manejó, y si usa el método 'addAll', asegúrese de que la capacidad se llame internamente antes de agregar los elementos de todos modos. – aioobe

0

Depende de sus datos de origen.

Si los datos de origen es ya una matriz y la matriz no será usada por otros, la manera más rápida es tener una envoltura delgada:

final Object[] source = ... 

Collection colllection = new AbstractCollection(){ 
    public Object[] toArray(){ return source; } 
    // other methods don't matter 
} 
0

Si están hablando de huella de memoria, tomar una mira this table en memory-measurer. Arrays$ArrayList falta, pero podría ser una buena alternativa a ArrayList (Arrays.asList(...)).

Cuestiones relacionadas