Collections.reverse(aList);
Example (Reference):
ArrayList aList = new ArrayList();
//Add elements to ArrayList object
aList.add("1");
aList.add("2");
aList.add("3");
aList.add("4");
aList.add("5");
Collections.reverse(aList);
System.out.println("After Reverse Order, ArrayList Contains : " + aList);
Answer from Shankar Agarwal on Stack OverflowCollections.reverse(aList);
Example (Reference):
ArrayList aList = new ArrayList();
//Add elements to ArrayList object
aList.add("1");
aList.add("2");
aList.add("3");
aList.add("4");
aList.add("5");
Collections.reverse(aList);
System.out.println("After Reverse Order, ArrayList Contains : " + aList);
The trick here is defining "reverse". One can modify the list in place, create a copy in reverse order, or create a view in reversed order.
The simplest way, intuitively speaking, is Collections.reverse:
Collections.reverse(myList);
This method modifies the list in place. That is, Collections.reverse takes the list and overwrites its elements, leaving no unreversed copy behind. This is suitable for some use cases, but not for others; furthermore, it assumes the list is modifiable. If this is acceptable, we're good.
If not, one could create a copy in reverse order:
static <T> List<T> reverse(final List<T> list) {
final List<T> result = new ArrayList<>(list);
Collections.reverse(result);
return result;
}
This approach works, but requires iterating over the list twice. The copy constructor (new ArrayList<>(list)) iterates over the list, and so does Collections.reverse. We can rewrite this method to iterate only once, if we're so inclined:
static <T> List<T> reverse(final List<T> list) {
final int size = list.size();
final int last = size - 1;
// create a new list, with exactly enough initial capacity to hold the (reversed) list
final List<T> result = new ArrayList<>(size);
// iterate through the list in reverse order and append to the result
for (int i = last; i >= 0; --i) {
final T element = list.get(i);
result.add(element);
}
// result now holds a reversed copy of the original list
return result;
}
This is more efficient, but also more verbose.
Alternatively, we can rewrite the above to use Java 8's stream API, which some people find more concise and legible than the above:
static <T> List<T> reverse(final List<T> list) {
final int last = list.size() - 1;
return IntStream.rangeClosed(0, last) // a stream of all valid indexes into the list
.map(i -> (last - i)) // reverse order
.mapToObj(list::get) // map each index to a list element
.collect(Collectors.toList()); // wrap them up in a list
}
nb. that Collectors.toList() makes very few guarantees about the result list. If you want to ensure the result comes back as an ArrayList, use Collectors.toCollection(ArrayList::new) instead.
The third option is to create a view in reversed order. This is a more complicated solution, and worthy of further reading/its own question. Guava's Lists#reverse method is a viable starting point.
Choosing a "simplest" implementation is left as an exercise for the reader.
Videos
Simple enough, there is a static method in Collections class reverse(), so just do:
Collections.reverse(yourListHere);
OK so I just read you can only use add and remove, check this:
package com.company;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main (String[] args){
List<Integer> lista = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,4));
for (int i = 0; i < lista.size(); i++) {
lista.add(i, lista.remove(lista.size() - 1));
}
System.out.println(lista);
}
}
ArrayList<Object> list = getArraylist();
for(int i = 0; i < list.size(); i += 1) {
list.add(i, list.get(list.size() - 1));
list.remove(list.size() - 1);
}
Simple enough.
This is a review question for my upcoming intro to programming exam and I need some help fixing my code. The question explicitly states to write a method that takes a List of integers and returns a new ArrayList in reverse order. It also says that we can assume we have methods prepend and append which add a new element to the beginning/end.
Here is my current code which gives me a NullPointerException
public static ArrayList<Integer> reverse(List<Integer> list){
ArrayList<Integer> list2 = new ArrayList<Integer>();
list.add(5);
list.add(10);
list.add(15);
list.add(20);
System.out.println(list);
for(int i = 0, j = list.size()-1; i < j; i++){
list2.add(i, list.remove(j));
}
return list2;
}
public static void main(String[] args){
reverse(null);
}Any help would be greatly appreciated. Thank you.
Edit: I am getting closer, 2 of the 4 objects are being reversed and displayed. More information is in the comments below.
Edit2: Thank you so much for all the help today guys, I understand this concept a lot better after reading through everyone's comments!
Simply:
// Create the list
ArrayList<String> myList = new ArrayList<String>();
// Add some items to it
myList.add("one");
myList.add("two");
myList.add("three");
// Reverse it by using Collections utilities.
Collections.reverse(myList);
Log.i("DEBUG", myList.get(0)); // Should print 'three'
You should import
import java.util.Collections;
and then use
Collections.reverse(results);