2

ノードを含む ArrayList があります。ノードには、ソース、ターゲット、およびコストがあります。ここで、ArrayList 全体を反復処理する必要があります。それはしばらくの間、1000ノード以上続きます。したがって、リストをソース別にソートしようとしました。しかし、リストで対応するペアを見つけるために、バイナリ検索を試みました。残念ながら、これはソースまたはターゲットのいずれかを比較したい場合にのみ機能します。しかし、適切なペアを取得するには、両方を比較する必要があります。ArrayList を効率的に検索する別の可能性はありますか?

4

5 に答える 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 に答える