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.
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.
Do this:
- Remove the element from the list:
ArraylistObj.remove(object);
- 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");
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);
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.
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);
}
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.
来源:https://stackoverflow.com/questions/20186681/how-to-move-specific-item-in-array-list-to-the-first-item