Я думаю, что это еще не все, и нам понадобится больше деталей от вас. Я предполагаю, что вы знаете, что определенно существует более одного файла заданного размера, иначе я бы сначала проверил, что это так. Насколько вы знаете, у вас просто много файлов с уникальными размерами.
Вы упомянули:
... из-за того, что каждый длинный объект уникален.
Я не думаю, что это проблема. Хотя это может быть правдой в зависимости от того, как вы создаете экземпляры Longs, это не должно мешать HashMaps вести себя так, как вы хотите. Пока два ключевых объекта возвращают одно и то же значение hashCode (), а метод equals () говорит, что они равны, ваш HashMap не будет создавать для него другую запись. Фактически, у вас не должно быть возможности видеть «список (filesize, 1)» с теми же значениями размера файла (если вы не написали свой собственный Long и не смогли правильно реализовать hashCode () / equals ()).
Тем не менее, код Cletus должен работать, если вы используете Java 5 или выше, если вы используете Java 1.4 или ниже, вам нужно будет либо сделать свой собственный бокс / распаковку вручную, либо заглянуть в Коллекции Apache Commons . Вот пример Cletus до Java 5:
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));
}
}