java - objetos - Cómo obtener el último valor de un ArrayList
metodos arraylist java (14)
¿Cómo puedo obtener el último valor de un ArrayList?
No sé el último índice de la ArrayList.
¿Qué tal esto? En algún lugar de tu clase ...
List<E> list = new ArrayList<E>(); private int i = -1; public void addObjToList(E elt){ i++; list.add(elt); } public E getObjFromList(){ if(i == -1){ //If list is empty handle the way you would like to... I am returning a null object return null; // or throw an exception } E object = list.get(i); list.remove(i); //Optional - makes list work like a stack i--; //Optional - makes list work like a stack return object; }
El último elemento de la lista es list.size() - 1
. La colección está respaldada por una matriz y las matrices comienzan en el índice 0.
Entonces el elemento 1 en la lista está en el índice 0 en la matriz
El elemento 2 en la lista está en el índice 1 en la matriz
El elemento 3 en la lista está en el índice 2 en la matriz
y así..
El método size()
devuelve el número de elementos en el ArrayList. Los valores de índice de los elementos van de 0
a (size()-1)
, por lo que usaría myArrayList.get(myArrayList.size()-1)
para recuperar el último elemento.
Lo siguiente es parte de la interfaz de List
(que implementa ArrayList):
E e = list.get(list.size() - 1);
E
es el tipo de elemento. Si la lista está vacía, get
lanza una IndexOutOfBoundsException
. Puedes encontrar toda la documentación de la API here .
No hay una forma elegante en Java vainilla.
Guayaba de google
La biblioteca de Google Guava es excelente: echa un vistazo a su clase de Iterables
. Este método arrojará una NoSuchElementException
si la lista está vacía, a diferencia de una IndexOutOfBoundsException
, como IndexOutOfBoundsException
con el enfoque típico de size()-1
: encuentro una NoSuchElementException
mucho más agradable o la capacidad de especificar un valor predeterminado:
lastElement = Iterables.getLast(iterableList);
También puede proporcionar un valor predeterminado si la lista está vacía, en lugar de una excepción:
lastElement = Iterables.getLast(iterableList, null);
o, si estás usando opciones:
lastElementRaw = Iterables.getLast(iterableList, null);
lastElement = (lastElementRaw == null) ? Option.none() : Option.some(lastElementRaw);
Si modifica su lista, use listIterator()
e iteree desde el último índice (que es size()-1
respectivamente). Si vuelves a fallar, revisa la estructura de tu lista.
Si puede, cambie la ArrayList
por una ArrayDeque
, que tiene métodos convenientes como removeLast
.
Si utiliza una lista enlazada, puede acceder al primer elemento y al último con solo getFirst()
y getLast()
(si desea una forma más limpia que size () -1 y get (0))
Implementación
Declarar una lista enlazada
int lastValue = arrList.get(arrList.size()-1);
Estos son los métodos que puede utilizar para obtener lo que quiere, en este caso, estamos hablando de los elementos PRIMERO y ÚLTIMO de una lista.
List<E> list = new ArrayList<E>();
private int i = -1;
public void addObjToList(E elt){
i++;
list.add(elt);
}
public E getObjFromList(){
if(i == -1){
//If list is empty handle the way you would like to... I am returning a null object
return null; // or throw an exception
}
E object = list.get(i);
list.remove(i); //Optional - makes list work like a stack
i--; //Optional - makes list work like a stack
return object;
}
Entonces, puedes usar
mLinkedList.getLast();
para obtener el último elemento de la lista.
Todo lo que necesita hacer es usar size () para obtener el último valor del Arraylist. Por ej. Si tiene un ArrayList de enteros, entonces para obtener el último valor tendrá que
int lastValue = arrList.get(arrList.size()-1);
Recuerde, se puede acceder a los elementos de un Arraylist utilizando valores de índice. Por lo tanto, ArrayLists se utilizan generalmente para buscar elementos.
Usando lambdas:
Function<ArrayList<T>, T> getLast = a -> a.get(a.size() - 1);
Utilizo la clase micro-util para obtener el último (y primer) elemento de la lista:
public final class Lists {
private Lists() {
}
public static <T> T getFirst(List<T> list) {
return list != null && !list.isEmpty() ? list.get(0) : null;
}
public static <T> T getLast(List<T> list) {
return list != null && !list.isEmpty() ? list.get(list.size() - 1) : null;
}
}
Un poco más flexible:
import java.util.List;
/**
* Convenience class that provides a clearer API for obtaining list elements.
*/
public final class Lists {
private Lists() {
}
/**
* Returns the first item in the given list, or null if not found.
*
* @param <T> The generic list type.
* @param list The list that may have a first item.
*
* @return null if the list is null or there is no first item.
*/
public static <T> T getFirst( final List<T> list ) {
return getFirst( list, null );
}
/**
* Returns the last item in the given list, or null if not found.
*
* @param <T> The generic list type.
* @param list The list that may have a last item.
*
* @return null if the list is null or there is no last item.
*/
public static <T> T getLast( final List<T> list ) {
return getLast( list, null );
}
/**
* Returns the first item in the given list, or t if not found.
*
* @param <T> The generic list type.
* @param list The list that may have a first item.
* @param t The default return value.
*
* @return null if the list is null or there is no first item.
*/
public static <T> T getFirst( final List<T> list, final T t ) {
return isEmpty( list ) ? t : list.get( 0 );
}
/**
* Returns the last item in the given list, or t if not found.
*
* @param <T> The generic list type.
* @param list The list that may have a last item.
* @param t The default return value.
*
* @return null if the list is null or there is no last item.
*/
public static <T> T getLast( final List<T> list, final T t ) {
return isEmpty( list ) ? t : list.get( list.size() - 1 );
}
/**
* Returns true if the given list is null or empty.
*
* @param <T> The generic list type.
* @param list The list that has a last item.
*
* @return true The list is empty.
*/
public static <T> boolean isEmpty( final List<T> list ) {
return list == null || list.isEmpty();
}
}
esto debería hacerlo:
if (arrayList != null && !arrayList.isEmpty()) {
T item = arrayList.get(arrayList.size()-1);
}
las matrices almacenan su tamaño en una variable local llamada ''longitud''. Dada una matriz llamada "a", podría usar lo siguiente para hacer referencia al último índice sin conocer el valor del índice
a [a.length-1]
para asignar un valor de 5 a este último índice, usaría:
a [a.length-1] = 5;
Let ArrayList is myList
public void getLastValue(List myList){
// Check ArrayList is null or Empty
if(myList == null || myList.isEmpty()){
return;
}
// check size of arrayList
int size = myList.size();
// Since get method of Arraylist throws IndexOutOfBoundsException if index >= size of arrayList. And in arraylist item inserts from 0th index.
//So please take care that last index will be (size of arrayList - 1)
System.out.print("last value := "+myList.get(size-1));
}