java.util.collection avec les frais généraux les plus basses?
-
14-11-2019 - |
Question
J'appelle une méthode dans une autre API qui accepte un java.util.Collection
d'objets. J'ai regardé la méthode et elle copie immédiatement tout dans la collection dans un nouveau ArrayList
avant d'effectuer sa tâche.
Cela m'a fait me demander: quelle est la collection Java au-dessus la plus basse absolue que je peux utiliser pour assembler rapidement les paramètres pour cette méthode?
La solution
Cela dépend de la façon dont il copie les éléments, mais s'il crée le ArrayList
-Copy comme ça
new ArrayList<Something>(inputCollection);
ou si c'est le cas
someCopy.addAll(inputCollection);
alors il passera par le inputCollection.toArray()
qui est probablement mieux mis en œuvre par ArrayList
.
Autres conseils
Cela dépend de vos données source.
Si vos données source sont déjà un tableau et que le tableau ne sera pas utilisé par d'autres, le moyen le plus rapide est d'avoir un wrapper mince:
final Object[] source = ...
Collection colllection = new AbstractCollection(){
public Object[] toArray(){ return source; }
// other methods don't matter
}
Si vous parlez de l'empreinte de la mémoire, jetez un œil à cette table dans mémoire de mémoire. Arrays$ArrayList
manque, mais pourrait être une bonne alternative à ArrayList
(Arrays.asList(...)
).
Mise à jour: J'ai mis à jour les liens originaux vers le nouvel emplacement du projet dans GitHub. Tenez compte de ces mesures de plusieurs années.