私はJava、特に以下で議論しているトピックに非常に慣れていませんが、これを解決するために多くの時間を費やし、このサイトで以前に提供された回答を読んでいますが、実際には何も見つかりません直接要点なので、これは尋ねる価値があると思いました。
私の質問は、実際には 2 つあります。私が解決しようとしている実際の問題には、オーダーブック プログラムの構築が含まれており、価格と時間の優先度を使用して並べ替えたいと考えています。最終的な目標は、最初に価格に基づいて、次に時間に基づいてコンパレーターを実装する、私が作成したクラスHasMap<ticker, TreeMap<Priority,Order>>
がどこにあるかのような構造を構築することです。Priority
これを行うと、ここで尋ねている質問にたどり着きました (私が取り組んでいることの実際の設定はあまり関係ありませんが、なぜこれを見ているのかという感覚を与えたいと思います)。
TreeMap
キーK
と値でを構築したいとしますV
。次に、もちろんTreeMap
、オブジェクトを比較する方法を知る必要がありますK
。私の質問:K
既にコンパレータを実装し、比較メソッドを定義している場合、それをTreeMap
読みますか? それとも、コンストラクターでコンパレーターを指定する必要がありますか? この質問に最も近いのは、次のTreeMap
ように、を使用してクラス内にコンパレータ クラスを作成することです。Java: SortedMap, TreeMap, Comparable? 使い方?
さて、これまで実際にコンパレーターをコンストラクターに渡してきましたが、問題なくビルドされているようです。しかし、これを に渡そうとするとHashMap
、エラーが発生します。コードは次のとおりです。
protected Comparator<Priority> priorityCompare;
protected TreeMap<Priority, Order> _buy = new TreeMap<Priority, Order>((Comparator<? super Priority>) priorityCompare);
protected HashMap<String, TreeMap<Priority, Order>> _buyBook;
protected HashMap<String, TreeMap<Priority,Order>> _sellBook;
TreeMap
問題は、 s 内のHashMap
s で this を使用したいのですが、Comparator
これを行うと Java が怒ってしまうことです。私の 2 番目の質問は次のとおりです。このような構造 (HashMap(-,TreeMap)) を使用したい場合、TreeMap でカスタム コンパレータを使用する場合、どのようにそれを行うのですか?
編集:これについては上で述べましたが、私が話していることを示していませんでした。申し訳ありません。私が実際に望んでいる状況は次のようなものです。
protected HashMap<String, TreeMap<Priority, Order>((Comparator<? super Priority>) priorityCompare)> _buyBook;
protected HashMap<String, TreeMap<Priority,Order>((Comparator<? super Priority>) priorityCompare)> _sellBook;
そうすれば、TreeMaps は、クラス Priority で Comparator を使用する方法を知ることができます。ただし、これを行うと、構文エラーが発生します (これらのトークンを削除するように指示するだけです)。また、値として _buy (最初のコード ボックスに記述されているとおり) を渡そうとしましたが、それは機能せず、実行するとすぐに愚かであることがわかりました。とにかく、上記の HashMap 内で K のキーを比較する方法を TreeMap にどのように認識させることができるかという問題は、私が抱えているより大きな問題です。