2017-10-30 7 views
0

を文字列のリストを参照してください:ストアと私はこのような何か持って効率的に

  • カテゴリ1:FOO、バー、...
  • カテゴリ2:バズ、qux、...
  • ...

私のコードのある時点で、アイテムが属するカテゴリをできるだけ早く検索する必要があります(例:「foo」から「category1」を検索してください)。

カテゴリをできるだけ早く特定できるように、これらのリストをどのように保存するかを決める必要があります(必要なデータ構造を自由に選択できます)。

頻繁には起こりませんが、後でこのリストを更新することもできます(ファイルを直接編集するか、シェルスクリプトなどを使用して、現在の実行可能ファイルとは独立しています)。

これらのリストを外部ファイルに保存するために私のニーズに最も適したものは何ですか?

+0

あるカテゴリ内の文字列が他のカテゴリ内に存在しない場合、カテゴリに対する文字列の単純なマップは問題ありません。各リスト内に重複が必要な場合は、リストのカテゴリのマップを使用できます。 firsのソリューションでは、map.get( "foo")はcategory1を返します。 2番目の方法では、マップのキーセットを繰り返して、必要な文字列を含むリストを探し、見つかったときに一致するカテゴリを返します。 –

+1

ファイルに正確にどのように格納されているかは重要ですか? Javaデータ構造の提案を求めるか、ファイルレイアウトを求めるかは明確ではありません。通常、ファイルを読むのは非常に遅いので、どのようにパフォーマンスが向上するかは問題になりません。 – daniu

答えて

1

java.util.Propertiesを使用すると、アイテムをキーとして、カテゴリをプロパティとして持つファイルにマップを簡単に格納することができます。

java.util.Propertiesは、java.util.Hashtableの拡張子であり、java.util.HashMapに非常に似ています。あなたは、コードを実行した場合

Properties properties = new Properties(); 
properties.setProperty("foo", "cat1"); 
properties.setProperty("ba", "cat1"); 
properties.setProperty("fooz", "cat2"); 
properties.setProperty("baz", "cat2"); 
File storage = new File("index.properties"); 
// write to file 
try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(storage), "UTF-8"))) { 
    properties.store(writer, "index"); 
} 

// Read from file 
Properties readProps = new Properties(); 
try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(storage), "UTF-8"))) { 
    readProps.load(reader); 
} 

if(!readProps.equals(properties)) { 
    throw new IllegalStateException("Written and read properties do not match"); 
} 

System.out.println(readProps.getProperty("foo")); 
System.out.println(readProps.getProperty("fooz")); 

:ファイルとバックファイルからそれを読むためにプロパティにカテゴリマップ -

つまり、あなたのアイテムをシリアル化するために、以下の例のようなコードを使用することができますそれがプリントアウトされます:あなたが作成したindex.propertiesファイルを編集する場合

cat1 
cat2 

、これはあなたが見るものである。

#index 
#Mon Oct 30 15:41:35 GMT 2017 
fooz=cat2 
foo=cat1 
baz=cat2 
ba=cat1 
1

アイテムが属するカテゴリを検索するには、HashMap<String, String>を使用します。ここで、キーはアイテムであり、値はそのカテゴリです。

ファイルにHashMapを保存し、それを読み戻し、HashMapSerializableを実装していることを考慮すると、hereを参照してください。

+0

これらのリストは時々かなり大きくなることがあります。そのため、カテゴリごとにアイテムを複製するのはちょっと気になります。 – Aleksandair

関連する問題