2016-05-17 5 views
3

私は150行10列の巨大なテーブルデータを持っており、各列には文字列データがあります。データを格納した後、特定の値を見つけるためにもトラバースする必要があります。だから、私はパフォーマンス、トラバースの柔軟性の点でこの場合の最良のデータ構造への答えを探しています。文字列データ型の2D行列を実装するのに最適なデータ構造は何ですか?

私はArray、ArrayList、Hashmapを考えました。

また、同様の質問がありましたが、私の質問には答えられません。

EDIT:データはアルファベットと整数の混合です。ソートできず、重複も含まれています。

+1

可能な複製を提供することを考える[Javaで含まれているため最速のデータ構造を()?](http://stackoverflow.com/questions/3267572 /最速データ構造 - for-in-java) –

+0

どのくらいの頻度でそれを横断する必要がありますか?あなたが何千回もそれを横断しない限り、150 * 10は本当に大きな問題ではありません。その場合、ユースケースをよりよく指定する必要があります。 –

+0

あなたは何をもっと記述する必要がありますか?配列はトラバースに最適です。しかし、あなたは検索する必要がありますか?追加(制限を延長)? – MBo

答えて

4

そのようなテーブルサイズの組み合わせの場合は、2D Array[][] + Hashmapのようになります。シンプルで効果的。

アレイには値が含まれており、任意の順序でテーブルをトラバースできます。

HashMapには、<String; TPoint>のペアが含まれています(座標は配列 - 行/列のペア)。

テーブルに文字列が含まれているかどうかだけを知る必要がある場合は、マップに座標を格納しないでください。

私は@krzykによって提案されたGuava Tableは、同様の機能(パフォーマンスについて知らない)の

2

グアバにはTable構造があり、使用できるように見えますが、特定の値を見つける方法はcontainsValue(...)で、それをトラバースすることもできます。

はここTableの一般的なexplanationです:

通常、一度に複数のキーにインデックスにしようとしているとき、あなたは醜いとに厄介であるMap<FirstName, Map<LastName, Person>>のようなもの、とする羽目になるだろうつかいます。 Guavaは、新しいコレクション型のTableを提供しています。これは、「行」型と「列型」のいずれの場合でもこのユースケースをサポートしています。

ArrayTable、行と列の完全な宇宙は建設時に指定されている必要がありますが、2によって支えられて:あなたはおそらくTableインタフェースの実装を以下に興味がある

テーブルが密集しているときの速度とメモリの効率を向上させる次元の配列。 ArrayTable作品多少異なる他の実装から

1

あなたがOの複雑さと要素にアクセスすることができますので、ちょうどこの場合には、私がString [] []を使用します(1)

が、私は、言ったようにこの場合のみです。行または列の数が動的に変更された場合は、List<List<String>>、より正確にはArrayListを使用します

+0

著者は「特定の値を見つける」ためにも – MBo

+0

が必要であり、どちらの方法でも彼はそれを見つけることができることに注意してください。 配列は次のようになります:array [43] [54] そしてarraylistを使うのはthis:listです。 get(43).get(54) – Arctigor

+1

あなたは特定のセルから値を取得することについて書いています。並べ替えられていない配列に文字列が含まれているかどうかを調べるには、**すべての** C * Rセルを参照する必要があります。 – MBo

関連する問題