2012-07-17 104 views
3

我閱讀了關於此的文檔,但我不完全清楚。我看準了一組方法,我想我會做重新排序是這樣的:Java(Android)重新排列對象列表

list.set(0,myObj);//Move first 
list.set(list.indexOf(myObj) - 1, myObj);//Move up 
list.set(list.indexOf(myObj) + 1, myObj);//Move down 
list.set(list.size() - 1, myObj);//Move last 

文檔在http://developer.android.com/reference/java/util/List.html規定,設置返回一個移動的物體。所以這導致我認爲我必須重新放置這個對象。我對麼?因此,在我描述的設置操作之後,我將有兩個對列表中的對象的引用。這將意味着我不得不循環列表以適當地放置所有其他對象?

+0

未設置實際移動對象爲您服務。我相信它也會返回錯誤檢查對象。 – 2012-07-17 12:49:30

+0

所以你說,集是我想要的?它會將對象下面的所有其他對象適當地移動? – 2012-07-17 12:52:37

+0

使用'Collection.rotate()'。正如我所提到的;) – pawelzieba 2012-07-17 12:58:42

回答

2

聽起來像你想要在列表頂部插入一個對象。 請勿使用set。

使用List.add(0, myObj)

它將撞擊休息下來。

+0

不,該對象已經在列表中。我想改變它的順序。 – 2012-07-17 12:50:17

+0

我想先移動到第一個,向上移動一個,向下移動一個,然後移動到最後。 – 2012-07-17 12:50:52

+0

啊,對不起。我沒有意識到它已經是列表中的一員。 – 2012-07-17 12:54:35

1

是的,元素被替換。這是很容易固定,雖然:

int index = list.indexOf(myObj); 
list.set(index, list.set(index - 1, myObj)); //Move up 

這將切換list(index - 1)list(index)。其他操作可以用相同的方式實現。

+0

看起來就像它也能工作一樣。我會使用Collections.swap我認爲它會更具可讀性。謝謝! :-) – 2012-07-17 13:01:48

5

使用Collection類的swap()互換在指定列表中指定位置的元素。

例子:

Collections.swap(arrayList,0,4); 
+0

好的,這看起來很有前途,可以一次一個上下移動,但如果我想先移動,該怎麼辦?我想只是使用循環將其移動到頂部 – 2012-07-17 12:57:35

+0

好的,謝謝,我想這就是我會做的。我會接受pawelzieba的回答,因爲他首先提到了收藏,而且他的名聲更低。謝謝:-) – 2012-07-17 12:59:31

+1

謝謝,所以我投了user370305,他先寫了'swap' – pawelzieba 2012-07-17 13:01:12