如何将数组列表中的特定项目移动到第一项

例如:一个列表

ABCDE

给定C,切换到

CABDE

注意数组的大小会改变,有些项目可能在运行时间被删除

Collections.swap(url, url.indexOf(itemToMove), 0); 

这个语句是不行的,因为它输出CBADE不是CABDE,怎么解决?

谢谢。

Solutions Collecting From Web of "如何将数组列表中的特定项目移动到第一项"

你想要的是一个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); 

另一个解决scheme,只要保持从0indexOf(itemToMove)

这是我的Kotlin版本:

 val list = mutableListOf('A', 'B', 'C', 'D', 'E') (0..list.indexOf('C')).forEach { Collections.swap(list, 0, it) } 

对不起,我对Java不熟悉,但是学了一点Kotlin。 但algorithm是一样的。

此代码将允许您增加列表的大小,并插入元素,而不会影响列表的顺序

 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放在索引0C放在另一个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"} 

最终,我们实现了我们的目标。