Ich denke, es gibt mehr dazu, und wir brauchen mehr Details von Ihnen. Ich nehme an, Sie wissen, dass es definitiv mehr als eine Datei einer bestimmten Größe gibt, sonst würde ich zuerst überprüfen, ob das der Fall ist. Nach allem, was Sie wissen, haben Sie einfach eine Menge Dateien mit eindeutigen Dateigrößen.
Sie erwähnt:
... aufgrund der Tatsache, dass jede Lang obj einzigartig ist.
Ich glaube nicht, dass dies das Problem ist. Auch wenn dies abhängig davon sein mag, wie Sie die Longs instanziieren, sollte dies nicht verhindern, dass sich HashMaps so verhält, wie Sie es möchten. Solange die beiden Schlüsselobjekte denselben hashCode() - Wert zurückgeben und die equals() -Methode angibt, dass sie gleich sind, erstellt Ihre HashMap keinen weiteren Eintrag für sie. Tatsächlich sollte es Ihnen nicht möglich sein, "eine Liste von (Dateigröße, 1)" mit den gleichen Dateigrößenwerten zu sehen (es sei denn, Sie haben Ihre eigene Long geschrieben und HashCode()/equals() korrekt implementiert).
Das heißt, Cletus' Code sollte funktionieren, wenn Sie mit Java 5 oder höher, wenn Sie verwenden sind Java 1.4 oder unten, werden Sie müssen entweder manuell Ihre eigenen Boxen/Unboxing tun, oder schauen Sie in Apache Commons Collections .Hier ist die Pre-Java-5-Version von Cletus' Beispiel:
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 in 1,6 Long.valueOf nur speichert die 256 Long-Positionen, die Null spreizen . Alles, was höher als 128 ist, wird nicht zwischengespeichert, ebenso Werte unter -127. –
für 1.6 (nicht 1.5 oder unter afaik) können Sie dieses Verhalten ändern, indem Sie -XX: AutoBoxCacheMax = 1000 setzen (siehe http://www.javaspecialists.eu/archive/Issue191.html) - wenn Ihre App verlangsamt wird Solche Operationen schon, dann vermute ich, dass es dort ein algorithmisches Problem gibt ... – Chii