Cómo obtener el último valor de una ArrayList

¿Cómo puedo obtener el último valor de una ArrayList?

No sé el último índice de ArrayList.

Lo siguiente es parte de la interfaz de la List (que ArrayList implementa):

 E e = list.get(list.size() - 1); 

E es el tipo de elemento. Si la lista está vacía, get arroja una IndexOutOfBoundsException . Puede encontrar toda la documentación de la API aquí .

esto debería hacerlo:

 if (arrayList != null && !arrayList.isEmpty()) { T item = arrayList.get(arrayList.size()-1); } 

No hay una manera elegante en Java vainilla.

Google Guava

La biblioteca de Google Guava es excelente; consulte su clase Iterables . Este método arrojará una NoSuchElementException si la lista está vacía, a diferencia de IndexOutOfBoundsException , como con el enfoque de size()-1 típico size()-1 : creo que 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); 

Uso la clase micro-util para obtener el último (y el primer) elemento de la lista:

 public final class Lists { private Lists() { } public static  T getFirst(List list) { return list != null && !list.isEmpty() ? list.get(0) : null; } public static  T getLast(List list) { return list != null && !list.isEmpty() ? list.get(list.size() - 1) : null; } } 

Ligeramente 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  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 getFirst( final List list ) { return getFirst( list, null ); } /** * Returns the last item in the given list, or null if not found. * * @param  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 getLast( final List list ) { return getLast( list, null ); } /** * Returns the first item in the given list, or t if not found. * * @param  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 getFirst( final List 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  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 getLast( final List list, final T t ) { return isEmpty( list ) ? t : list.get( list.size() - 1 ); } /** * Returns true if the given list is null or empty. * * @param  The generic list type. * @param list The list that has a last item. * * @return true The list is empty. */ public static  boolean isEmpty( final List list ) { return list == null || list.isEmpty(); } } 

El método size() devuelve la cantidad de elementos en ArrayList. Los valores de índice de los elementos son de 0 a (size()-1) , por lo que usaría myArrayList.get(myArrayList.size()-1) para recuperar el último elemento.

Si puede, cambie ArrayList por ArrayDeque , que tiene métodos convenientes como removeLast .

Usando lambdas:

 Function, T> getLast = a -> a.get(a.size() - 1); 
  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)); } 

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í..

Todo lo que necesita hacer es usar tamaño () para obtener el último valor del Arraylist. Por ej. si ArrayList de enteros, para obtener el último valor tendrá que

 int lastValue = arrList.get(arrList.size()-1); 

Recuerde, se puede acceder a los elementos en un Arraylist usando valores de índice. Por lo tanto, ArrayLists generalmente se utilizan para buscar elementos.

las matrices almacenan su tamaño en una variable local llamada ‘longitud’. Dado un conjunto llamado “a”, puede 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 que usaría:

a [a.length-1] = 5;

¿Qué tal esto? En algún lugar de tu clase …

 List list = new ArrayList(); 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; } 

Si modifica su lista, utilice listIterator() e itere desde el último índice (que es size()-1 respectivamente). Si falla nuevamente, verifique la estructura de su lista.