2011-08-12 94 views
4

我有一個ArrayList我需要確保一個特定的項目在0位置,如果不是,我需要將它移動到那裏。該項目有一個isStartItem布爾值,所以我可以很容易地找到我需要在位置0的具體項目,但我該如何將其移動到正確的位置?Android:ArrayList將項目移動到位置0

我假設我需要使用這樣的事情:

for(int i=0; i<myArray.size(); i++){  
    if(myArray.get(i).isStartItem()){ 
     Collection.swap(myArray, i, 0); 
    } 
} 

但是這似乎並沒有工作...

+1

你是什麼「的意思這似乎並不奏效「。它會產生一個錯誤,還是它會拋出異常,或者簡單的交換不會發生? –

回答

15

您需要使用Collections類的swap方法。 Collections,最後爲s

變化 -

Collection.swap(myArray, i, 0); 

本 -

Collections.swap(myArray, i, 0); 

看看this例子。

CollectionCollections在Java中是兩個不同的東西。第一個是界面,第二個是類。後者有一個靜態交換方法,但前者不。

+0

糟糕...我在輸入問題時忘記了。 – ryandlf

+0

@ryandlf:哦.....然後你能告訴我你的意思是「似乎沒有工作」嗎? –

+0

當它將i中的元素移動到0時,它實際上是否將位於0的元素移動到i?如果是的話,我不認爲這是OP所期待的。我通常只是簡單地創建一個新的對象來保存我的內容,然後調用.remove(index)來將其拉出,然後調用索引爲0的.add(索引,對象)。yada yada – MrTristan

-1

您可以使用Arraylist的set函數。

set(position,object) 
+2

這將只替換所有在'object'的0處的數組列表中。我不認爲OP想要失去任何元素,只需對它們進行重新排序。 –

+0

我確實嘗試過這種方法,它完全按照Ted的描述。 – ryandlf

5

我不知道什麼是Collection.swap,但是這個代碼應該工作:

for(int i=0; i<myArray.size(); i++){  
    if(myArray.get(i).isStartItem()){ 
     Collections.swap(myArray, i, 0); 
     break; 
    } 
} 

或者你也可以做到這一點的長手:

for(int i=0; i<myArray.size(); i++){  
    if(myArray.get(i).isStartItem()){ 
     Object thing = myArray.remove(i); // or whatever type is appropriate 
     myArray.add(0, thing); 
     break; 
    } 
}