2

bigCodeList に重複が含まれている中で、個別のコード (aCode) に基づいていくつかの操作を実行するための簡単な実装を行いたいと考えています。以下に2つのアプローチについて言及しましたが、知りたいのは、パフォーマンスバイス+メモリ消費に関して、それらの中でより効果的なものはどれですか?


アプローチ 1 :

    String tempStr = "";

    for(String aCode : bigCodeList){
        if(tempStr.indexOf(aCode) == -1) {
            // deal With the aCode related work
            tempStr += aCode+"-"
        }
    }

アプローチ 2 :

        HashSet<String> tempHSet = new HashSet<String>();

        for(String aCode : bigCodeList){

            if(tempHSet.add(aCode)){

                // deal With the aCode related work

            }

        }

注 : aCode は LON のような 3 文字のコードです

4

4 に答える 4

7

アプローチ 2 ははるかに優れています。アプローチ 1 を考慮する必要さえありません。

まず第一に、アプローチ 1 は検索に線形時間があります。つまりtempStr、2 倍の長さになると、それを検索する時間は 2 倍になります (もちろん、平均して、常に最初の要素を見つければ、短いままです)。

tempStr次に、追加するたびに全体をコピーします(Stringオブジェクトは不変であり、それが既存のものから新しいものを作成する唯一の方法であるため)。そのため、オプションの追加にも時間がかかります。

aCode3 番目 (パフォーマンスの問題ではない): このようにデータ ( ) とメタデータ (セパレーター) を混在さ-せると、あらゆる種類の望ましくない効果が生じます。は決してダッシュを含めることはできないと確信しているかもしれませんが、それが 2 週間後に変わるとしたらどうでしょうか? aCode

4 番目:このユース ケースとほぼ同じようにHashSet構築れています。それが最も得意とすることです。異なるオブジェクトのセットを保持し、それが既に存在するかどうかを確認し、新しいオブジェクトを追加します。

于 2013-06-06T08:35:37.180 に答える
0

パフォーマンスとメモリに関しては、Hashset が String よりもコーディングで使用するのに最適です。

文字列変数に値を追加するには時間がかかります

于 2013-06-06T08:47:22.420 に答える
0

java.util.Set は重複を許可しませんが、重複の拒否についてはかなり「静か」です。

于 2013-06-06T08:34:45.187 に答える