Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将数组列表中的特定项移动到第一项_Java_Android_Collections_Arraylist_Swap - Fatal编程技术网

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

Java 如何将数组列表中的特定项移动到第一项,java,android,collections,arraylist,swap,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,如何修复它 谢谢 这样做: 删除列表中的元素:ArraylistObj.Remove(object) 添加元素返回到列表中特定位置的:ArrayListObj.Add(位置、对象) 根据您的代码,请使用以下

例如:列表

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,如何修复它

谢谢

这样做:

  • 删除列表中的元素:
    ArraylistObj.Remove(object)
  • 添加元素返回到列表中特定位置的
    ArrayListObj.Add(位置、对象)
  • 根据您的代码,请使用以下命令:

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

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

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

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

    如果这是一个频繁的操作,并且随机访问较不频繁,您可以考虑切换到另一个<代码>列表>代码>实现,如<代码> Link KistList。如果你非常关心元素的顺序,你也应该考虑一个列表是否是正确的数据结构。 您可以尝试以下方法:

    url.remove(itemToMove);
    url.add(0, itemToMove);
    
    或者如果
    url
    LinkedList

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

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

    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);
    }
    
    private void insert(双倍价格){
    对于(int i=0;i关键点。获取(i)){
    key.add(null);
    对于(int j=keys.size()-1;j>i;j--){
    集合。交换(键,j,j-1);
    }
    键。添加(价格);
    Collections.swap(key,key.size()-1,i);
    keys.remove(keys.size()-1);
    返回;
    }
    }
    键。添加(价格);
    }
    
    假设您有一个数组:

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

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

    另一个解决方案是,继续从
    0
    切换到
    indexOf(itemToMove)

    这是我的Kotlin版本:

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

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

    这不是会增加列表的大小吗?然后使用url从列表中删除元素。删除(“C”);并使用url在零位置添加元素;如果速度是一个标准,那么也许你现在也应该看看@Aditya断开的链接-