ノードを含む ArrayList があります。ノードには、ソース、ターゲット、およびコストがあります。ここで、ArrayList 全体を反復処理する必要があります。それはしばらくの間、1000ノード以上続きます。したがって、リストをソース別にソートしようとしました。しかし、リストで対応するペアを見つけるために、バイナリ検索を試みました。残念ながら、これはソースまたはターゲットのいずれかを比較したい場合にのみ機能します。しかし、適切なペアを取得するには、両方を比較する必要があります。ArrayList を効率的に検索する別の可能性はありますか?
質問する
1938 次
5 に答える
0
メソッドを使用して.compareTo()
、ノードを比較できます。
于 2013-06-24T15:07:35.347 に答える
0
ソースとターゲットのペアを格納するヘルパー クラスを作成できます。
class SourceTarget {
public final Source source; // public fields are OK when they're final and immutable.
public final Target target; // you can use getters but I'm lazy
// (don't give this object setters. Map keys should ideally be immutable)
public SourceTarget( Source s, Target t ){
source = s;
target = t;
}
@Override
public boolean equals( Object other ){
// Implement in the obvious way (only equal when both source and target are equal
}
@Override
public int hashCode(){
// Implement consistently with equals
}
}
HashMap<SourceTarget, List<Node>>
次に、ソースとターゲットの各ペアが、正確にそのソースとターゲットのペアを持つノードのリストにマップされた に保存します。取得するには、使用するだけです
List<Node> results = map.get( new SourceTarget( node.source, node.target ) );
ヘルパー クラスを作成する代わりに、Zim-Zam の回答でコンパレータを使用し、ペアとして機能TreeMap<Node,List<Node>>
する代表的なNode
オブジェクトを使用できます。SourceTarget
于 2013-06-24T16:41:01.810 に答える