2011-01-14 1 views
4

Si une collection, comme une arrayliste, stocke des objets personnalisés (par exemple Personne avec plusieurs propriétés) par milliers, y a-t-il quelque chose à faire dans mon code ou dans le constructeur de la collection pour le préparer pour une si grande collection.Optimisation de la collection pour contenir un grand nombre d'objets

Je ne pense pas vraiment à des threads dédiés, etc., mais plutôt au niveau du facteur de charge (dois-je le faire pour le scénario ci-dessus?).

Merci

+0

Cela dépend vraiment beaucoup de la mise en œuvre de la collecte spécifique. Un ArrayList est vraiment une chose plutôt triviale en interne et il n'y a pas grand chose à faire en plus de choisir la bonne taille initiale. D'autres types d'implémentation de collection peuvent avoir de nombreuses considérations. – Affe

Répondre

6

Je venais initialiser la collection à une taille qui serait proche de la taille finale, afin de minimiser le nombre de redimensionnements:

List<Person> persons = new ArrayList<Person>(1024); 
8

Vous pouvez faire:

new ArrayList<T>(10000); 

qui pré-alloue le tableau avec la taille spécifiée (10000 par exemple) afin qu'il ne dispose pas de réattribuer que vous ajoutez des éléments. En dehors de cela, il n'y a rien que vous puissiez faire. En outre, la classe ArrayList n'a pas d'importance sur le type de référence stockée, de sorte que les informations ne peuvent pas vraiment vous aider dans l'optimisation.

11

Une autre approche:

Puisque nous sommes parler d'une telle collection énorme, qui serait "Eat up" vous RAM,
Je pense que vous devriez envisager de stocker cette collection dans une base de données et lire/écrire/mettre à jour uniquement lorsque vous devez.

+3

D'accord. Peut-être que la taille de la collection augmentera considérablement, que la RAM ne peut pas tenir. –

Questions connexes