2011-03-18 3 views
5

Javaでparallel arraysの実際の使用例はありますか?相互に関連するN個のアレイを維持することはあまりにも面倒であるように思われる。なぜJavaで並列配列を使用するのですか?

例:

int ages[] = {0,   17,  2,   52,   25}; 
String names[] = {"None", "Mike", "Billy", "Tom",  "Stan"}; 
int parent[] = {0,   3,   1,   0,   3}; 

私はちょうど1つの配列内のクラスPersonとストアオブジェクトを作成することができます。もう少し高価になりますが、使い方は簡単でしょうか?

答えて

10

パラレルアレイは、配列以外のデータ構造を持たないBasic(元のもの)のような言語からのホールドオーバーです。代わりに、提案するようにオブジェクトを定義する必要があります。

1

表現しようとしているものがオブジェクトとしてよりよく説明できる場合にのみ、クラス/オブジェクト表現を作成します。

ハッシュマップは別の解決策です。たとえば、年齢や名前が異なる配列の代わりに、名前が一意の場合は、その名前をキーとして使用して値として使用することができます。

+2

マップはパラレルアレイとほとんど同じくらい悪いです。 –

+0

@stephan:うーん、私は同意しますが、時には物事が簡単なときに地図を使うことを好みます:) – Sujoy

+0

私はそれを改訂します。いくつかの点では、マップは悪化しています。例えばパラレルアレイと推奨アプローチ(カスタムクラス)の両方よりも必然的に遅くなり、メモリが増えてしまいます。この場合のように、関連付ける属性が3つ以上ある場合は、Mapのアプローチは面倒です。 –

1

クラスはより良いですが、ユースケースが狭い場合、たとえば、次のようになります。 1つのメソッド本体、それを作成するのは無駄です。 Pairクラスをお持ちの場合は、新しいクラスを作成せずにその目的のために特殊化することができます。

11

Javaでの並列配列の唯一の本当のメリットは、オブジェクトの割り当てやヒープの使用を減らす(IMO極端な)手段としての唯一の利点です。十分な大きさのオブジェクトのコレクションの場合、3つの配列は、スペースを占有し、カスタムクラスのインスタンスの単一配列より少ないオブジェクトを使用します。

このアプローチは、あなたのコードをもっと壊れやすくするので、悪い考えです。ほとんどの場合、カスタムクラスを作成して使用するのが最良の方法です。

+3

はい、これはAndroid開発で念頭に置くべきことです。すべてのAndroid搭載端末が同等であるとは限らず、一般的に携帯電話のリソースは限られています。 Android Developersリファレンスのパフォーマンスヒントを引用するには、(Foo、Bar)オブジェクトのタプルを格納するコンテナを実装する必要がある場合は、2つの並列Foo []とBar []配列が一般にはるかに優れていることを覚えてくださいカスタム(Foo、Bar)オブジェクトの単一の配列よりも優れています」。 http://developer.android.com/training/articles/perf-tips.html – loeschg

関連する問題