如何将数组列表中的特定项目移动到第一项
例如:一个列表
ABCDE
给定C,切换到
CABDE
注意数组的大小会改变,有些项目可能在运行时间被删除
Collections.swap(url, url.indexOf(itemToMove), 0);
这个语句是不行的,因为它输出CBADE不是CABDE,怎么解决?
谢谢。
你想要的是一个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");
问题是,你用C交换C,所以ABCDE变成CBAD E.
你可以尝试这样的事情:
url.remove(itemToMove); url.add(0, itemToMove);
或者,如果url
是一个LinkedList
:
url.remove(itemToMove); url.addFirst(itemToMove);
另一个解决方案,只要保持从0
到indexOf(itemToMove)
。
这是我的Kotlin版本:
val list = mutableListOf('A', 'B', 'C', 'D', 'E') (0..list.indexOf('C')).forEach { Collections.swap(list, 0, it) }
对不起,我对Java不熟悉,但是学了一点Kotlin。 但算法是一样的。
此代码将允许您增加列表的大小,并插入元素,而不会影响列表的顺序
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); }
假设你有一个数组:
String[] arrayOne = new String[]{"A","B","C","D","E"};
现在你想把C
放在索引0
把C
放在另一个variables中
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"}
最终,我们实现了我们的目标。