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


71

例如:一个列表

美国广播公司

给定C,切换到

卡德

请注意,数组大小将更改,某些项可能会在运行时删除

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

该语句不起作用,因为它输出CBADE而不是CABDE,如何解决呢?

谢谢。

Answers:


104

您想要的是一个非常昂贵的操作ArrayList。它要求在列表的开头和C向下的位置之间的每个元素都移位一个。

但是,如果您确实想要这样做:

int index = url.indexOf(itemToMove);
url.remove(index);
url.add(0, itemToMove);

如果这是您的常用操作,而随机访问的频率相对较低,则可以考虑切换到另一个List实现LinkedList。如果您如此担心元素的顺序,则还应该考虑列表是否完全是正确的数据结构。


4
如果速度是一个标准,那么也许您也应该看看commons.apache.org/proper/commons-collections/javadocs/…–
Aditya

@Aditya的链接断开了。
AJW


18

做这个:

  1. 从列表中删除该元素:ArraylistObj.remove(object);
  2. 将元素添加列表中的特定位置ArrayListObj.add(position, Object);

根据您的代码使用此:

url.remove("C");
url.add(0,"C");

1
是不是会增加列表的大小?
Pankaj Kumar

然后使用url.remove(“ C”);从列表中删除该元素。并使用url.add(0,“ C”)在零位置添加元素;
Venkata克里希纳

8

问题是,您将C与A交换,因此ABCDE变成CBADE。

您可以尝试这样的事情:

url.remove(itemToMove);
url.add(0, itemToMove);

或者如果urlLinkedList

url.remove(itemToMove);
url.addFirst(itemToMove);

8

另一个解决方案,只需保持从交换0indexOf(itemToMove)

这是我的Kotlin版本:

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

抱歉,我不熟悉Java,但是学到了一些Kotlin。但是算法是一样的。


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);
}

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"}

最终,我们实现了目标。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.