現在、多くの文字列(+2000)を使用するJavaアプリケーションで作業しています。私はこれらの文字列を適切な構造体に格納したいので、新しい文字列を格納したいときは、同じ文字列がすでに存在する場合は、高速にチェックできます。構造体に同じ文字列がない場合は、新しい文字列を格納します((基本的には文字列を繰り返しません))。異なる文字列のみを格納する効率的な方法/構造
//PSEUDOCODE
private ?????? myCollectionOfStrings;
public void store_If_Not_Exist(String aNewString){
if (!exist_in_Collection(aNewString)){ //this must be fast.
store_in_Collection(aNewString);
}
}
私は現在、ナイーブな実装を使用していますが、私はそれを知っているが、実際には非効率的である:
private List<String> myCollectionOfStrings;
public void store_If_Not_Exist(String aNewString){
boolean existInCollection = false;
for (String s: myCollectionOfStrings){
if (s.equals(aNewString)){
existInCollection = true;
break;
}
}
if(!existInCollection)
store_in_Collection(aNewString);
}
質問です:メソッド/構造には、どのような種類/アルゴリズムは、私ができます文字列を格納するために使用するため、存在のチェックは高速に実装できますか?たぶんTrieツリー、またはHashMap?ありがとう!
「セット」を使用してください。しかし、ハッシュコードを参照するものは比較的効率的です。 2000年はそれほど大きくはない。もちろん、ステミング、複数形などではなく直接照合を探していると仮定します。実際には、Setを使用するとチェックがバイパスできます。インスタンスが1つしか存在しないためです。 –
KevinO
Setデータ構造を探しています。 Javaでは、 'HashSet'です。それは要素のO(1)ルックアップ時間を持っています。 –
非常に高速な 'HashSet'を使用します。 – Bohemian