例如:一个列表
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,如何修复?
谢谢。
例如:一个列表
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,如何修复?
谢谢。
你想要的是在ArrayList
中一项非常昂贵的操作。它需要将列表开头到C
位置之间的每个元素向下移动一个位置。
然而,如果你真的想要这样做:
int index = url.indexOf(itemToMove);
url.remove(index);
url.add(0, itemToMove);
如果这对你来说是一个频繁的操作,而随机访问则不那么频繁,你可能考虑切换到另一个List
实现,如LinkedList
。 如果你非常关心元素的顺序,你还应该考虑是否列表是正确的数据结构。
请执行以下操作:
ArraylistObj.remove(object);
ArrayListObj.add(position, Object);
根据您的代码,请使用此方法:
url.remove("C");
url.add(0,"C");
0
和 indexOf(itemToMove)
进行交换。val list = mutableListOf('A', 'B', 'C', 'D', 'E')
(0..list.indexOf('C')).forEach {
Collections.swap(list, 0, it)
}
对不起,我对Java不熟悉,但我学了一点Kotlin。但算法是相同的。
问题是,你把C和A交换了位置,所以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);
以下是基于本主题其他答案的另一个Kotlin解决方案:
inline fun <T> List<T>.moveItemToFirstPosition(predicate: (T) -> Boolean): List<T> {
for (element in this.withIndex()) {
if (predicate(element.value)) {
return this.toMutableList().apply {
removeAt(element.index)
add(0, element.value)
}.toList()
}
}
return this
}
使用方法:
var list = listOf("A", "B", "C", "D", "E")
list = list.moveItemToFirstPosition { it == "C" }
或
inline fun <T> MutableList<T>.moveItemToFirstPosition(predicate: (T) -> Boolean) {
for (element in this.withIndex()) {
if (predicate(element.value)) {
removeAt(element.index)
add(0, element.value)
break
}
}
}
用法:
val list = mutableListOf("A", "B", "C", "D", "E")
list.moveItemToFirstPosition { it == "C" }
Kotlin ->
fun <T> MutableList<T>.move(item: T, newIndex: Int) {
val currentIndex = indexOf(item)
if (currentIndex < 0) return
removeAt(currentIndex)
add(newIndex, item)
}
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"}
最终,我们达成了我们的目标。
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);
}