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

时间:2013-11-25 07:15:46

标签: java android collections arraylist swap

例如:列表

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,如何解决?

感谢。

6 个答案:

答案 0 :(得分:77)

你想要的是ArrayList中非常昂贵的操作。它需要将列表开头和C位置之间的每个元素向下移动一个。

但是,如果你真的想这样做:

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

如果您经常这样做,并且随机访问频率较低,您可以考虑切换到另一个List实施,例如LinkedList。如果您对元素的顺序如此关注,您还应该考虑列表是否是正确的数据结构。

答案 1 :(得分:12)

这样做:

  1. 从列表中移除 元素:ArraylistObj.remove(object);
  2. 元素 添加到列表 的特定位置 :{ {1}}
  3. 根据您的代码使用此:

    ArrayListObj.add(position, Object);

答案 2 :(得分:4)

问题是,你用A交换C,所以A B C D E变为C B A D E。

您可以尝试这样的事情:

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

如果urlLinkedList

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

答案 3 :(得分:3)

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

这是我的Kotlin版本:

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

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

答案 4 :(得分: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);
}

答案 5 :(得分: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];
        }

高于2C的索引。现在在C

的索引处插入0
arrayOne[0] = characterC;

上述循环的结果将是:

arrayOne: {"C","A","B","D","E"}

最后,我们实现了目标。