私は Java で A* アルゴリズムを実装しており、開いているリストをソートしておく簡単な方法として TreeSet を使用しています。A* に慣れていない場合、これは基本的に A から B への最短パスを取得する関数であり、オープン リストはTiles
B への近さに基づいてソートされたノード (私の場合は )のリストです。
私のオブジェクトは、次のcompareTo()
ようにソートするための関数を実装しています。
@Override
public int compareTo( Tile b )
{
return ( this.f< b.f) ? -1 : ( this.f> b.f) ? 1 : 0;
}
私の問題は、開いているリストにいくつかのタイルを追加しようとしたときに発生します.TreeSetcompareTo()
は、equals()
. Tiles
2 つの異なるオブジェクトが同じ値を持つ可能性があるf
ため、TreeSet はオブジェクトがリストに既に存在すると見なし、追加しません。
ドキュメント(または少なくとも、私が読んでいる方法)によると、次を使用する必要がありますequals
:
"指定された要素がまだ存在しない場合は、このセットに追加します。より正式には、セットに(e==null ? e2==null : e.equals( e2)) ." (強調鉱山)。
orをequals()
呼び出すときに使用する TreeSet を取得するにはどうすればよいですか? 情報については、私のクラスは関数をオーバーライドしないため、デフォルトを取得する必要があります。add()
contains()
compareTo()
Tile
equals()
return a == b
私がやろうとしていることが TreeSet では不可能な場合、使用すべき適切なコレクションは何ですか?