私には以下のスニペットがあります。 printTop
へ効率的な挿入と参照を解決するための最適化された方法
public void addTrade(String instrument, int volume)
public void printTop(int count)
引数は、それらの多く重く上場銘柄を印刷意味:私は2つのメソッドのシグネチャは以下の通りですaddTrade
とprintTop
public static void main(String args[]) throws Exception {
MostTraded mt = new MostTraded();
mt.addTrade("IBM", 1000);
mt.addTrade("AAPL", 500);
mt.addTrade("NFLX", 600);
mt.addTrade("AAPL", 900);
mt.printTop(2); // AAPL 1400, IBM 1000
}
を実装する必要があります。例えば、printTop(2)
は、上位2の取引された株を意味する。追加は効率的でなければならず、在庫が複数回取引され、その場合にはvolume
を更新する必要があります。
私はそれを解決するために考えられたが、より良い方法があるかどうかわからない次ています。
のルックアップの値の効率的な追加を実施し、株式のために追加するには、私はprintTop
を行うには<stockname, volume>
でシンプルなHashMap
を使用することができ、私は、そのキーvolume
であり、値が追跡するSet<String>
あるTreeMap
を使用することができます。 明らかに、私がしてaddTrade
の場合、私はTreeMap
の項目も変更する必要があります。
同じ問題を解決するための良い方法はありますか?
ベスト・アンサーは、ソリューションの使用方法に依存します。私は、もしAddsがprintTopsの間に何千回も起こるとしたら、printTopsの間にいくつかのAddsがある場合と比べて最良の解決策が異なるだろうと思います。 – hatchet
@hatchet、あなたは正しいことを前提としていますが、追加はprintTopよりも頻繁に行われます。それにはいくらかの遅さが許容されます。あなたの前提を守ることは、より理想的な解決策は何でしょうか? – curiousengineer
特に、異なるテロップの数がPrintTop呼び出しの間に発生すると予想されるAddsの数よりも少ない場合や、通常は必要な上位項目の数が少ない場合、需要に応じて部分的にソートする方が安くなるだろうと推測しています(PrintTopが呼び出されたとき)、DodgyCodeExceptionは順序付きコレクションを維持するよりもむしろ示唆しています。あなたはHashMapだけを維持します。 PrintTopを可能な限り最適なものにしたいだけで、Addsを介して配布されるメンテナンスコストについてはあまり気にしないなら、それは別の答えを示唆しています。 – hatchet