2011-03-04 28 views
0

我需要基於另一個數組中保存的位置對數組進行排序。Java:將不同類型的數組排序到另一個

我有什麼工作,但它有點慢,有沒有更快/更好的方式來實現這一點?

2件:

第一部分

int i = mArrayName.size(); 
int temp = 0; 
for(int j=0;j<i;j++){ 
      temp = mArrayPosition.get(j); 
      mArrayName.set(temp, mArrayNameOriginal.get(j)); 
     } 

在這一部分,mArrayPosition是我想mArrayName是在位置

例。
輸入:
mArrayName =(一個,兩個,三個)
mArrayPosition =(2,0,1)

輸出:
mArrayName =(3,一個2)

第2部分

int k=0; 
int j=0; 
do{ 
    if(mArrayName.get(k)!=mArrayNameOriginal.get(j)){ 
     j++; 
    }else{ 

     mArrayIdNewOrder.set(k, mArrayId.get(j)); 
      k++; 
      j=0; 
     } 
    }while(k < mArrayName.size()); 
} 

在這種PA rt,mArrayName是重新排序的名稱數組,mArrayNameOriginal是原始名稱數組。

Ex。
mArrayName =(三,一,二)
mArrayNameOriginal =(一,二,三)

現在,我想這兩個數組比較,找出哪些條目都是平等的,涉及的是一個新的數組中有它們的rowId編號。

Ex。
輸入:
mArrayId =(001,002,003)

輸出:
mArrayIdNewOrder =(003001002)

於是我將有mArrayIdNewOrder ID與在mArrayName正確的名稱匹配起來。

就像我說的這些方法的工作,但有沒有更快/更好的方法來做到這一點?我試着看着Arrays.sort和比較器,但他們似乎只是按字母或數字排序。我看到像我可以在比較器中創建自己的規則,但它可能最終會與我已有的相似。

對不起,令人困惑的問題。如果需要,我會盡力澄清任何含糊之處。

+0

我們在說ArrayLists? – ThomasRS 2011-03-04 00:49:52

+0

呃第一個例子怎麼可能是正確的,你不想要(一個@ 2,兩個@ 0,三個@ 1)輸出(兩個,三個,一個)? – ThomasRS 2011-03-04 01:01:33

+0

是這些是arraylists – Cameron 2011-03-04 01:54:57

回答

1

我發現的最佳表現是Android's Designing For Performance doc。你違反了幾種「Android方式」的做法,可以幫助你。

您在每個循環內使用多個內部獲取器,看起來像一個簡單的值。通過直接訪問字段進行重做。

要獲得額外功勞,請發表您的成績比較結果!我很想看到他們!

+0

啊,謝謝你,我已經爲我的其他應用程序做了這個,但忘記了這個!這也會有所幫助。 – Cameron 2011-03-04 01:58:21

1

你可以使用某種形式的元組,某些類同時擁有id和name。你只需要有一個java.util.Comparator來相應地進行比較,這兩個元素就會一起移動,你的代碼將變得更清晰。

這個數據結構可能對你的程序的其餘部分很方便......如果不是,只要把它取下來,你就完成了。

+0

聽起來不錯!現在你是怎麼做到的......嘿,你能提供一個代碼示例來說明如何讓這些陣列一起移動到比我已經更快的期望配置上嗎?我的大腦只考慮循環和if語句。 – Cameron 2011-03-04 02:08:21

0

如果您的訂單索引是緊湊的,即從索引0到大小-1,那麼只需使用一個數組並在之後創建更新列表?關於像

MyArray[] array = new MyArray[size]; 
for(int j=0;j< size;j++) { 
    array[ mArrayPosition.get(j) ] = mArrayName.get(j); 
} 

// create ArrayList from array 
+0

這就是我已經擁有的。寫下你的樣子,它看起來像這樣 mArrayName.set(mArrayPosition.get(j),mArrayNameOriginal.get(j)); 你的方式只是擺脫臨時變量。 – Cameron 2011-03-04 02:02:34

+0

如果你不打算遵循Lungberg的方法(面向對象?),我建議你使用Maps。 – ThomasRS 2011-03-04 11:45:50

相關問題