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

Posted

技术标签:

【中文标题】如何将数组列表中的特定项目移动到第一项【英文标题】:How to move specific item in array list to the first item 【发布时间】:2013-12-09 19:14:41 【问题描述】:

例如:一个列表

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

谢谢。

【问题讨论】:

【参考方案1】:

这样做:

    删除列表中的元素:ArraylistObj.remove(object); 添加元素返回到列表特定位置ArrayListObj.add(position, Object);

根据你的代码使用这个:

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

【讨论】:

不是会增加list的大小吗? 然后使用 url.remove("C"); 从列表中删除元素并使用 url.add(0,"C"); 在零位置添加元素【参考方案2】:

另一种解决方案,只是不断从0 交换到indexOf(itemToMove)

这是我的 Kotlin 版本:

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

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

【讨论】:

【参考方案3】:

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

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

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

如果这对您来说是一个频繁的操作,并且随机访问的频率较低,您可以考虑切换到另一个 List 实现,例如 LinkedList。如果您非常关心元素的顺序,您还应该考虑列表是否是正确的数据结构。

【讨论】:

如果速度是一个标准,那么也许你也应该看看commons.apache.org/proper/commons-collections/javadocs/… @Aditya 现在链接已断开。 这是新链接 - commons.apache.org/proper/commons-collections/javadocs/api-4.4/…【参考方案4】:

假设你有一个数组:

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"

最终,我们实现了目标。

【讨论】:

【参考方案5】:

此代码将允许您增加列表的大小,并在不干扰列表顺序的情况下插入元素

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

【讨论】:

【参考方案6】:

问题是,你把 C 换成 A,所以 A B C D E 变成了 C B A D E。

你可以试试这样的:

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

或者如果urlLinkedList

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

【讨论】:

以上是关于如何将数组列表中的特定项目移动到第一项的主要内容,如果未能解决你的问题,请参考以下文章

从多个链接获取数据,同时存储在 Scrapy 中的一项中

如何将文件中的特定数据读入数组字符串

如何根据某些文本标准对元组列表进行分组/存储?

如何在由前一个元素的连续值和第二项中的零组成的列表中添加连续元素?

在此项目中按下 TouchableOpacity 后,如何将焦点设置为列表项中的一个 TextInput?

如何在TinyMCE的列表项中添加段落?