現在、2 つの for ループを使用してすべてのエントリを比較していますが、比較が重複しています。HashMap は順序付けされていないため、既に行われた比較を削除する方法がわかりません。たとえば、次のようなものがあります。
for(Entry<String, String> e1: map.entrySet())
{
for(Entry<String, String> e2: map.entrySet())
{
if (e1.getKey() != e2.getKey())
{
//compare e1.getValue() to e2.getValue()
}
}
}
これに関する問題は、最初のエントリが 2 番目のエントリと比較され、次に 3 番目のエントリと比較されるということです。ただし、2 番目のエントリは再び最初のエントリと比較されます。次に、3 番目のエントリが最初のエントリ、2 番目のエントリ、4 番目のエントリなどと比較されます。比較の重複を避けるために、HashMap を反復処理するより良い方法はありますか?
追加情報:
より具体的に、そしてできればあなたの質問に答えるために、私が持っている HashMap はファイル名 (キー) とファイルの内容 (値) を保存しています - テキストファイルだけです。HashMap は、比較対象のファイルを含むディレクトリをトラバースすることによって取り込まれています。次に、いくつかのアルゴリズムを使用してファイルのペアを実行し、各ファイルのペア間の類似性を判断しています。ファイル 1 をファイル 2 と比較し、次にファイル 2 をファイル 1 と比較する必要はありません。2 つのファイルを 1 回比較するだけでよいからです。ただし、すべてのファイルを他のすべてのファイルと一度比較する必要があります。私は HashMaps を扱うのは初めてです。以下のagimの答えは、私の目的にぴったりかもしれません。しかし、以下の Evgeniy Dorofeev と Peter Lawrey のソリューションの両方に頭を悩ませることも試みます。これが物事をよりよく説明するのに役立つことを願っています。