例如:列表
A B C D E
给定C,切换到
C A B D E
请注意,数组大小会发生变化,某些项目可能会在运行时删除
Collections.swap(url, url.indexOf(itemToMove), 0);
此声明无效,因为它输出C B A D E而非C A B D E,如何解决?
感谢。
答案 0 :(得分:77)
你想要的是ArrayList
中非常昂贵的操作。它需要将列表开头和C
位置之间的每个元素向下移动一个。
但是,如果你真的想这样做:
int index = url.indexOf(itemToMove);
url.remove(index);
url.add(0, itemToMove);
如果您经常这样做,并且随机访问频率较低,您可以考虑切换到另一个List
实施,例如LinkedList
。如果您对元素的顺序如此关注,您还应该考虑列表是否是正确的数据结构。
答案 1 :(得分:12)
这样做:
ArraylistObj.remove(object);
根据您的代码使用此:
ArrayListObj.add(position, Object);
答案 2 :(得分:4)
问题是,你用A交换C,所以A B C D E变为C B A D E。
您可以尝试这样的事情:
url.remove(itemToMove);
url.add(0, itemToMove);
如果url
是LinkedList
:
url.remove(itemToMove);
url.addFirst(itemToMove);
答案 3 :(得分:3)
另一种解决方案,只需保持从0
到indexOf(itemToMove)
的交换。
这是我的Kotlin版本:
val list = mutableListOf('A', 'B', 'C', 'D', 'E')
(0..list.indexOf('C')).forEach {
Collections.swap(list, 0, it)
}
抱歉,我对Java不熟悉,但学到了一点Kotlin。但算法是一样的。
答案 4 :(得分:0)
此代码允许您增加列表的大小,并插入元素而不会干扰列表的顺序
private void insert(double price){
for(int i = 0; i < keys.size(); i++){
if(price > keys.get(i)){
keys.add(null);
for(int j = keys.size()-1; j > i; j--){
Collections.swap(keys, j, j-1);
}
keys.add(price);
Collections.swap(keys, keys.size()-1, i);
keys.remove(keys.size()-1);
return;
}
}
keys.add(price);
}
答案 5 :(得分:0)
假设你有一个数组:
String[] arrayOne = new String[]{"A","B","C","D","E"};
现在您要将C
放在索引0
,将C
放在另一个变量中
String characterC = arrayOne[2];
现在运行循环如下:
for (int i = (2 - 1); i >= 0; i--) {
arrayOne[i+1] = arrayOne[i];
}
高于2
是C
的索引。现在在C
0
arrayOne[0] = characterC;
上述循环的结果将是:
arrayOne: {"C","A","B","D","E"}
最后,我们实现了目标。