2011-07-28 38 views
3

是否使用比三個獨立陣列列表慢的Tuple(double,int,int)的陣列列表?我想避免創建大量的Tuple對象,但方法2是否通過自動裝箱創建對象?使用Tuple(double,int,int)的陣列列表比兩個陣列列表慢

//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

方法1顯然不會在此刻編譯 - 如果您使用真實代碼而不是僞代碼提出問題,它會使您更容易給出準確答案。 –

回答

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

如果Tople是一個擁有3個ivars的類,在這種情況下,這將是一條路。

Aditionaly arralist只接收對象,所以它會自動複製所有的原語,但是如果你使用的是類,它肯定不會autobox類中的ivars。

3

除非你已經寫了一個自定義的Tuple類保持拆箱double和兩個int值,他們將反正裝箱......所以基本上你將與每件額外Tuple對象結束了,雖然只是一個底層數組和ArrayList而不是3

如果三值代表一個有意義的綜合值,雖然,我會非常想寫一個小班他們三人的有意義每個封裝屬性。這樣你可能會得到更多可讀代碼有效的代碼(因爲不會有任何裝箱)。

1

最有可能使用對象的數組(或你的情況,元組),這將節省您的代碼行,並把一切都在一個地方(元組)

這裏的示例代碼爲我會做。

//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類保持兩個int秒和一個double,你將創建1/3的對象數量。