How to move specific item in array list to the first item

前端 未结 6 1418
别跟我提以往
别跟我提以往 2020-12-08 13:03

For example : A list

A B C D E

Given C , Switch to

C A B D E

Notice that the array size will change, some items may removed in run times

相关标签:
6条回答
  • 2020-12-08 13:19

    What you want is a very expensive operation in an ArrayList. It requires shifting every element between the beginning of the list and the location of C down by one.

    However, if you really want to do it:

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

    If this is a frequent operation for you, and random access is rather less frequent, you might consider switching to another List implementation such as LinkedList. You should also consider whether a list is the right data structure at all if you're so concerned about the order of elements.

    0 讨论(0)
  • 2020-12-08 13:19

    The problem is, you swap C with A, so A B C D E becomes C B A D E.

    You could try something like this:

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

    Or if url is a LinkedList:

    url.remove(itemToMove);
    url.addFirst(itemToMove);
    
    0 讨论(0)
  • 2020-12-08 13:23

    This code will allow you to increase size of list, and insert elements without otherwise disturbing order of list

    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 讨论(0)
  • 2020-12-08 13:31

    Let say you have an array:

    String[] arrayOne = new String[]{"A","B","C","D","E"};
    

    Now you want to place the C at index 0 get the C in another variable

    String characterC = arrayOne[2];
    

    Now run the loop like following:

    for (int i = (2 - 1); i >= 0; i--) {
    
                arrayOne[i+1] = arrayOne[i];
            }
    

    Above 2 is index of C. Now insert C at index for example on 0

    arrayOne[0] = characterC;
    

    Result of above loop will be like that:

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

    The end, we achieve our goal.

    0 讨论(0)
  • 2020-12-08 13:34

    Do this:

    1. Remove the element from the list: ArraylistObj.remove(object);
    2. Add the element back to the list at specific position: ArrayListObj.add(position, Object);

    As per your code use this :

    url.remove("C");
    url.add(0,"C");
    
    0 讨论(0)
  • 2020-12-08 13:35

    Another solution, just keep swaping from 0 to indexOf(itemToMove).

    This is my Kotlin version:

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

    Sorry I am unfamiliar with Java but learned a little Kotlin. But the algorithm is the same.

    0 讨论(0)
提交回复
热议问题