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

103,756

Solution 1

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.

Solution 2

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

Solution 3

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.

Solution 4

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);
Share:
103,756
user782104
Author by

user782104

php

Updated on July 05, 2022

Comments

  • user782104
    user782104 almost 2 years

    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

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

    This statement is not working because it output C B A D E not C A B D E , how to fix it?

    Thanks.

  • Pankaj Kumar
    Pankaj Kumar over 10 years
    isn't it will increase the size of list?
  • Venkata Krishna
    Venkata Krishna over 10 years
    Then remove the element from list by using url.remove("C"); and add element at zero position by using url.add(0,"C");
  • Aditya
    Aditya over 10 years
    if speed is a criteria, then maybe you should also look at commons.apache.org/proper/commons-collections/javadocs/…
  • AJW
    AJW over 4 years
    @Aditya broken link now.
  • Aditya
    Aditya over 4 years