2014-03-28 51 views
5

以下ArrayList填充ArrayAdapter。如何切换ArrayList中的元素

List<String> hold_people = new ArrayList<String>(); 

hold_people.add("Frank"); 
hold_people.add("Bob"); 
hold_people.add("Tom"); 
hold_people.add("Alice"); 
hold_people.add("Glen"); 

弗兰克是第一个位置。但用户希望首先看到Alice。如何将Alice移动到第一个位置?

我无法按字母顺序对其进行排序,因为我必须根据用户请求保持特定顺序。

+0

你想整理你的清单吗? –

+0

我不想对它进行排序。 – user3134565

+1

使用'set(index,Obj)' –

回答

2

使用Collections.swap(List<?> list, int i, int j)

互换在指定列表中指定位置的元素。 (如果指定的位置是相等的,调用此方法离开 列表不变。)

使用Collections.rotate(List<?> list, int distance)

旋转通过指定的距离在指定列表中的元素。 调用此方法后,对于位于0和list.size() - 1(含)之间的所有 i,索引i处的元素将是先前在索引(i - 距离)mod list.size()处的元素 。 (此方法对列表大小没有影响 )。

6

您可以使用Collections.swap

Collections.swap(hold_people, 0, hold_people.indexOf("Alice")); 

这将交换列表中第一个元素与"Alice"

请注意,如果您的列表中没有字符串"Alice",则可以返回hold_people.indexOf("Alice"),因此您可以检查列表中是否包含该字符串。

int index = hold_people.indexOf("Alice"); 
if(index != -1) 
    Collections.swap(hold_people, 0, index); 
+0

这不起作用,因为现在弗兰克走了。 – user3134565

+0

@ user3134565为我工作:http://ideone.com/y5vVi1。确保在适配器中进行更改时正确更新了列表视图。 –

0

如果你不想使用集合某种原因,你可以做

String temp = hold_people.get(0); 
int i = hold_people.indexOf("Alice"); 
hold_people.set(0,"Alice"); 
hold_people.set(i, temp); 

这将取决于你要交换哪一个改变,但其基本思想是存在的。