2016-05-11 4 views
0

プレフィックスによるプロパティファイルからプロパティを読み取るのに最も効率的な(時間複雑性の点で)ソリューションは何ですか?例えば接頭辞によってプロパティファイルからプロパティを読み取る最も効率的なソリューションは何ですか?

プロパティファイルは次のようになります場合は、 -

prefix1.prop1=val1 
prefix1.prop2=val2 
prefix2.prop3=val3 
prefix2.prop4=val4 

私はこのように呼ばれる方法を探しています - getPropertiesByPrefix("prefix1")次のリストを返す必要があります。

["prefix1.prop1", "prefix1.prop2"] 

をI 2つのオプションを見ることができます -

  1. getPropertiesByPrefixに電話するときは、 1つずつつなぎ、接頭辞で始まる小道具を手に入れます。
  2. プロパティを一度読み取り、トライを作成してから、getPropertiesByPrefixがトライを使用します。

第2のオプションは、より効率的な方法と思われます。これらの既存の実装/サードパーティライブラリがありますか?または3番目のオプション?

+0

プロパティファイルの容量はどれくらいですか?私はアルゴリズム的なパフォーマンスが少しでも問題になる場所は見たことがありません。それが非常に大きいとき、ディスクからの読み込みのI/Oパフォーマンスが非常に悪く、あらゆる種類のひどい(リストのような)データ構造が勝つ可能性が高いです。あなたが十分な記憶力を持っている限り、少なくとも。シンプルな 'TreeMap'はbtwでもメモリ内の記憶が素早く動作するはずです – zapl

+0

数字は私が想定している100秒になります。私はすべての単一の要求にプレフィックスでアクセスしているということです。だから、O(n)ルックアップを持っているのは高価なようだ。 – sunnyside

+0

プロパティファイルの読み込みと読み込みは、すでにそこにあります。ですから、私はutil.Propertiesオブジェクトで作業する必要があります。 – sunnyside

答えて

1

解析が簡単です。

n個の鍵のうちpropertiesがあるとしたら、key.startsWith(prefix)のループは、O(m*n)時間で実行されます.mは接頭辞のサイズです。

一方、Trieを作成すると、これは明らかに改善されたO(m)になります。

Apache Commonsいくつかの実装がありますが、ここでnが小さければ、実際にはコードを複雑にすることを避けて、単純なループになりません。

+0

O(1)検索のために 'HashMap'を使うことができます。 –

+0

@JamesBuckそして、あなたはHashMapで接頭辞の検索をどうしますか? –

+0

彼は、完全なプロパティ名をマップしたいだけで、部分的な接頭辞では検索しません。 –

関連する問題