これには他にもあると思います。あなたからの詳細が必要になります。特定のサイズのファイルが確実に複数あることを知っていると仮定しています。ご存じのとおり、一意のファイル サイズを持つファイルがたくさんあるだけです。
あなたが言及した:
...各 Long obj が一意であるためです。
これは問題ではないと思います。Long をインスタンス化する方法によっては、これが当てはまる場合もありますが、HashMap が希望どおりに動作するのを妨げるべきではありません。2 つのキー オブジェクトが同じ hashCode() 値を返し、equals() メソッドがそれらが等しいと言う限り、HashMap は別のエントリを作成しません。実際、同じファイルサイズ値を持つ「(filesize, 1) のリスト」を表示することはできないはずです (独自の Long を記述し、hashCode()/equals() を正しく実装できなかった場合を除く)。
とはいえ、Java 5 以降を使用している場合は Cletus のコードが機能するはずです。Java 1.4 以下を使用している場合は、手動でボックス化/ボックス化解除を行うか、Apache Commons Collectionsを調べる必要があります。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));
}
}