2016-09-18 8 views
0

。ループのように、時間と空間を節約するためにカウンターメソッドを作成するにはどうすればよいですか?</em><em>ArrayListMultisetと<em>CounterMultiset</em></p> <p>ArrayListMultisetは単にリストに何かを入れて.addメソッドを使用しています。私は、2つの異なるクラスによって使用されるインターフェイス<em>多重集合</em>で働いています

Multiset<String> set = new Multiset<String>(); 
for(int i = 0; i < 10000; i++) 
{ 
    set.add("Hello"); 
} 

これは、プログラムがHelloにリストを10,000回追加する原因になります。

次にCounterMultisetがあります。 。それはTがStringのペアオブジェクト((T, Integer)にかかる別のクラスを、保存し、「こんにちは」とIntegerは、追加されるようにしようとしている回数がある私はそうのようにそれを書かれている:

public void add(Multiset<T> item) 
{ 
    if(!contains(item)) 
    { 
     Pair newpair = new Pair(item, 0); 
     pairs.add(newpair); 
    } 
    for(int i = 0; i < pairs.size(); i++) 
    { 
     if(pairs.get(i).getFirst() == item) 
     { 
      pairs.get(i).changeSecond(); 
     } 
    } 
} 

changeSecond()は、Helloという単語が再び追加されたことを示すために、オブジェクト内の2番目の数値を1つ増やします。

私の質問は、プログラムのスペースと時間を節約する適切な方法ですか?カウンタを使用する方が速く、 "Hello"を10,000回追加するほうが速いのはいつですか?

+0

'set.add(" Hello "、10000)' – Kelvin

+0

なぜそれが速いのでしょうか?期待している操作は何ですか? このようなマルチセットを使用している場合、メモリのCPUサイクルを交換しています。通常、メモリに保存するのは簡単です。セットを追加した後に、言葉の数を繰り返すことを期待している場合を除き、高速です。 –

+0

@ケルヴィン同じアイデアだが、どちらの方がどちらの方が良いか不思議である。 – SwaggyC

答えて

0

Helloは、コード内の文字列です。

ArrayListMultisetの各要素にはHelloのコピーはありません。 String Poolオブジェクトへの参照があります。

get/put(私が前提)の方が速いのは、基礎となるデータ構造に依存します。

関連する問題

 関連する問題