1

私は文字列型の2つの値を含むリストを維持する必要があります.v1、v2などのキーごとにk. より良いオプションは何ですか

  1. v1 と v2 を含む文字列を含む値を持つハッシュマップで、選択後に split() を使用して正しい値を取得します。
  2. 2 つの文字列変数の配列を含む値を持つハッシュマップ

私はAndroidアプリを作成しているので、パフォーマンスが心配です。2番目のケースでは直接アクセスできますが、各値には別の配列が含まれます(わかりませんが、複雑な方法のように見えます)が、1番目のケースでは v.split(",")[0 のようなすべてのアクセスで分割関数を使用します]

私を案内してください。

Map<String,String[]> listMap= new HashMap<String, String[]>();
Map<String,String> listMap1= new HashMap<String, String>();;

for (int i = 1; i < tl.getChildCount(); i++) {
    TableRow row = (TableRow) tl.getChildAt(i);
    COLOR_TABLE clr = (COLOR_TABLE) row.getTag();

    if (clr == COLOR_TABLE.green) {
        //comp
        String x1=listMap1.get( ((TextView) row.getChildAt(0)).getText());
        String x2=listMap.get( ((TextView) row.getChildAt(0)).getText());
        // now i have to add two string values in a list seperately
    }
}
4

4 に答える 4

5

文字列を乱用しないでください。時々遅くなる可能性があり、その目的のために作成されたものではありません。

よりオブジェクト指向にしたい場合は、一般的な Pair クラスを使用できます。

public class Pair<A, B> {

  public A first;
  public B second;

  public Pair(A first, B second) {
    this.first = first;
    this.second = second;
  } 
}

もちろん、アクセサなどを使用して、より適切に行うことができます。

于 2013-09-27T07:08:23.583 に答える
1

分割関数は O(string size) の複雑さで実行されると思いますが、配列のリーチ要素は定数です

于 2013-09-27T07:05:40.040 に答える
1

文字列は配列よりもはるかに遅くなり、コードもより複雑になります。(実際に測定するまで、パフォーマンスの違いを確認するのは難しいことに注意してください。)

しかし、それが私だったら、最も単純なソリューションを使用し、オブジェクトを使用します。後で、プログラムが遅すぎることが判明し、測定によりこれがパフォーマンスのボトルネックであることが判明した場合は、他の解決策を検討します。

于 2013-09-27T07:07:09.737 に答える
0

配列またはカスタム クラスを値として使用することは、設計の観点から推奨されるアプローチです。文字で区切られた 2 つの文字列を 1 つの文字列にパックする場合、最初の文字列に同じ文字が含まれないようにするか、何らかのエスケープ メカニズムを使用して文字を含める必要があります。

パフォーマンスのみが心配な場合は、すべてのオプションをテストして、最適なものを選択してください。結果は保存するデータとライブラリの実装方法に依存するため、予測するのは困難です。たとえば、独立した文字列への参照を格納する構造は、アクセス時にキャッシュ ミスが発生する可能性があります。文字列の分割または同様の方法がキャッシュミスよりも安価であることが判明した場合、その方が高速になります。

于 2013-09-27T07:09:34.650 に答える