Je pense qu'il y a plus à cela, et nous aurons besoin de plus de détails de votre part. Je suppose que vous savez qu'il y a certainement plus d'un fichier d'une taille donnée, sinon je vérifie d'abord que c'est le cas. Pour tout ce que vous savez, vous avez simplement beaucoup de fichiers avec des tailles de fichiers uniques.
Vous avez dit:
... en raison du fait que chaque long obj est unique.
Je ne pense pas que ce soit le problème. Bien que cela puisse être vrai en fonction de la façon dont vous instanciez les Longs, cela ne devrait pas empêcher HashMaps de se comporter comme vous le souhaitez. Tant que les deux objets clés renvoient la même valeur hashCode() et que la méthode equals() indique qu'ils sont égaux, votre HashMap ne créera pas d'autre entrée pour cela. En fait, il ne devrait pas être possible de voir "une liste de (filesize, 1)" avec les mêmes valeurs de taille de fichier (sauf si vous avez écrit votre propre Long et que vous n'avez pas implémenté hashCode()/equals() correctement). Cela dit, le code de Cletus devrait fonctionner si vous utilisez Java 5 ou plus, si vous utilisez Java 1.4 ou moins, vous devrez soit faire votre propre boxing/unboxing manuellement, soit regarder dans Apache Commons Collections .Voici la version pré-Java 5 de l'exemple de Cletus:
Map count = new HashMap();
for (Iterator filesIter = files.iterator(); filesIter.hasNext();) {
File file = (File)filesIter.next();
long size = file.getTotalSpace();
Integer n = count.get(size);
if (n == null) {
count.put(size, Integer.valueOf(1));
} else {
count.put(size, Integer.valueOf(n.intValue() + 1));
}
}
AFAICT dans 1.6 met en cache Long.valueOf que les 256 positions longues qui chevauchent zéro . Toute valeur supérieure à 128 ne sera pas mise en cache, de même que les valeurs inférieures à -127. –
pour 1.6 (pas 1.5 ou moins afaik) vous pouvez changer ce comportement en mettant -XX: AutoBoxCacheMax = 1000 (voir http://www.javaspecialists.eu/archive/Issue191.html) - si votre application est ralentie par de telles opérations déjà, alors je doute qu'il y ait un problème algorithmique là-bas ... – Chii