2011-07-28 13 views
3

3人の独立したarraylistsより遅いTuple(double、int、int)のarraylistを使用していますか?たくさんのTupleオブジェクトを作成しないようにしたいのですが、メソッド2はオートボクシングによってオブジェクトを作成しますか?2人のarraylistsより遅いTuple(double、int、int)のarraylistを使用しています

//Method 1 
Arraylist<Tuple> arr=new Arraylist<Tuple>(); 
Tuple t=new Tuple(double, int, int); 
class Tuple{ 

    private double value; 
    private int a; 
    private int b; 
} 

//Method 2 
Arraylist<Double> arr=new Arraylist<Double>(); 
Arraylist<Integer> arr=new Arraylist<Integer>(); 
Arraylist<Integer> arr=new Arraylist<Integer>(); 
+0

Method1は現在のところコンパイルされません。擬似コードではなく実際のコードで質問すると、正確な回答を得るのが容易になります。 –

答えて

3

あなたの質問には文脈がありません。この問題は何度も尋ねられており、最高の解決策は一つもありません。

私の意見では、データをモデル化する最良の方法は、データを表す論理型を使用することです。 (メソッドを持つ特定のタイプを持っているあなたは、現在のタプルを使用しているが、それは良いでしょう。)だから、

、私は次の操作を行います:限り速度は特に行くよう

List<NumberContainer> list = new ArrayList<NumberContainer>(); 

- それどのようにデータを使用するかによって異なります。高速アクセス時間をお探しの場合は、mapを使用し、各項目にある値をキーするのが最善の方法です。あなたの直接的な質問に答えるために

+0

+1 - 可能なXY問題 – Kal

+0

@Kal、 '可能なXY問題'とはどういう意味ですか? – jjnguy

+1

http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem @jjnguy - 私は文脈の欠如に関するあなたのコメントを参照していました。そのOPの問題の可能性が高いです。 – Kal

0

トープルが3つのイヴァールを持つクラスである場合、その場合は行く方法です。

アディションアラーリストはオブジェクトを取るので、すべてのプリミティブがオートボックスになりますが、クラスを使用している場合は、クラス内のイーバールをオートボックスしません。

3

あなたはアンボクシングdoubleと2 intの値を維持するカスタムTupleクラスを書いていない限り、彼らはので、基本的に、あなたがたが、項目ごとに余分なTuple対象になってしまいます...とにかく箱詰めされます値のトリプルはしかし意味のある複合値を表す場合、代わりに3

のひとつ根本的な配列とArrayListは、私は非常に、それぞれに意味のある名前でそれらの3をカプセル化するために、小さなクラスを記述するために誘惑されるだろうプロパティ。そうすれば、より読みやすいコード効率的なコードになる可能性が高くなります(ボクシングはありません)。

1
ほとんどのオブジェクトの配列を使用して

(またはあなたの場合、タプルで)あなたのコードの行を保存し、一箇所ですべてを置く(タプル。)

ここでのサンプルコードは、何のためだIするだろう。

//Class 
class container() { 
    int value1, value2; 
    double value3; 
    //Constructor 
    container(int value1, int value2, double value3) { 
     this.value1 = value1; 
     this.value2 = value2; 
     this.value3 = value3; 
    } 
} 

//Implementation 
ArrayList<container> arr=new ArrayList<container>(); 
0

、方法2 は、あなたが入れている値は、(などdoubleint、)プリミティブであると仮定オートボクシングでオブジェクトを作成しません。もちろん、Tupleクラスを使用する場合はオブジェクトも作成しますが、Tupleクラスが2つのintdoubleを保持していると仮定すると、オブジェクトの数は1/3になります。

関連する問題