2009-07-11 12 views
0

現在、私はBlackberryアプリケーション用の永続ストレージオブジェクトを実装しています。
設定オブジェクトのベクトルを含んでいます。特定の設定値を取得するJ2MEベクトルから特定のオブジェクトを取得する

私の現在のimplementionこの

public String getSettingByName(String key) 
{ 
    String value = ""; 
    for (Enumeration e = _appSettings.elements(); e.hasMoreElements();) 
    { 
     if(((AppSettingsObject)e.nextElement()).get_key() == key) 
     { 
      value = ((AppSettingsObject)e.nextElement()).get_value(); 
     } 
    } 
    return value; 
} 

のように見える列挙をループするよりも、その値にアクセスするためのより良い方法はありますか?

ありがとうございます!

答えて

2

ベクトルは、基本的には拡張可能な配列なので、特定の要素を見つけるためにベクトルを検索する必要があります。ベクタがソートされていることを確認すると、バイナリ検索を実行できます。コードの複雑さに比べてわずかなパフォーマンスの向上を正当化するために、あなたのベクトルに十分な要素があるとは思われないので、ここでは大きな違いがあるとは思わない。

ただし、キーを値にマップできるようにしたいと思うようです。その場合、java.util.Hashtableクラスはより良いかもしれません:

Hashtable appSettings = new Hashtable(); 

appSettings.put("key1", "value1"); 
appSettings.put("key2", "value2"); 

String value1 = (String)appSettings.get("key1"); 
String value2 = (String)appSettings.get("key2"); 
+0

素晴らしいこと、オーバーヘッド/管理オーバーヘッドの比較であなたのオプションは何ですか? –

+0

私は意見=)を意味しました –

+1

どのようにオーバーヘッド?ランニングコストの面では、Hashtableはキーを見つけるためにベクトルよりも効率的です。 O(n)、線形、ベクトル、O(logn)、対数、ハッシュテーブルを使ってソートし、バイナリを実行した場合、O(1)のキーを定数、サーチ。あなたがそれに格納する可能性のある少数の要素については、実行時間は重要ではありません。スペースに関しては、恐らくそれについて心配する必要はありません。使いやすさという点で、ここがハッシュテーブルを選択する主な理由です。キーを値にマッピングするのははるかに簡単です。 – IRBMe

関連する問題