use*_*104 53 java collections android swap arraylist
例如:一个列表
ABCDE
给定C,切换到
CABDE
请注意,数组大小将更改,某些项可能会在运行时删除
Collections.swap(url, url.indexOf(itemToMove), 0);
Run Code Online (Sandbox Code Playgroud)
这句话不起作用,因为它输出的是CBADE而不是CABDE,如何修复呢?
谢谢.
Chr*_*yes 84
你想要的是一个非常昂贵的操作ArrayList
.它需要在列表的开头和C
向下的位置之间移动每个元素.
但是,如果你真的想这样做:
int index = url.indexOf(itemToMove);
url.remove(index);
url.add(0, itemToMove);
Run Code Online (Sandbox Code Playgroud)
如果这是您的常用操作,并且随机访问的频率较低,您可以考虑切换到另一个List
实现,例如LinkedList
.如果您对元素的顺序如此关注,您还应该考虑列表是否是正确的数据结构.
Ven*_*hna 15
做这个:
ArraylistObj.remove(object);
ArrayListObj.add(position, Object);
根据您的代码使用此:
url.remove("C");
url.add(0,"C");
Run Code Online (Sandbox Code Playgroud)
问题是,您将C与A交换,因此ABCDE变成CBADE。
您可以尝试这样的事情:
url.remove(itemToMove);
url.add(0, itemToMove);
Run Code Online (Sandbox Code Playgroud)
或者如果url
是LinkedList
:
url.remove(itemToMove);
url.addFirst(itemToMove);
Run Code Online (Sandbox Code Playgroud)
另一种解决方案,只需保持从交换0
到indexOf(itemToMove)
。
这是我的Kotlin版本:
val list = mutableListOf('A', 'B', 'C', 'D', 'E')
(0..list.indexOf('C')).forEach {
Collections.swap(list, 0, it)
}
Run Code Online (Sandbox Code Playgroud)
抱歉,我不熟悉Java,但是学到了一些Kotlin。但是算法是一样的。
归档时间: |
|
查看次数: |
69811 次 |
最近记录: |