Java의 ArrayList에서 마지막 요소 가져오기

Mohammad Irfan 2023년10월12일
  1. size()get() 메서드를 사용하여 마지막 요소 가져오기
  2. Java에서 ArrayListLinkedList로 변환
  3. Java에서 ArrayListArrayDeque로 변환
  4. 구아바 라이브러리 사용하기
  5. 요약
Java의 ArrayList에서 마지막 요소 가져오기

이 튜토리얼은 Java의 ArrayList에서 마지막 요소를 가져오는 방법을 소개하고 주제를 이해하기 위한 몇 가지 예제 코드도 나열합니다.

ArrayList는 정렬된 컬렉션에 유사한 데이터를 저장하는 데 사용할 수 있는 동적 배열입니다. Arrays와 ArrayList의 좋은 점은 저장된 인덱스를 알고 있다는 점을 감안할 때 저장된 모든 요소에 대한 임의 액세스를 허용한다는 것입니다. 그러나 인덱스를 모르는 경우 ArrayList의 마지막 요소에 어떻게 액세스할 수 있습니까? Python과 같은 일부 다른 언어는 역 인덱싱을 제공하므로 -1을 사용하여 마지막 요소에 액세스할 수 있습니다. 이 튜토리얼에서는 Java의 ArrayList에서 마지막 요소를 가져오는 방법을 배웁니다.

size()get() 메서드를 사용하여 마지막 요소 가져오기

Java의 ArrayList에는 ArrayList에 있는 요소의 수를 찾는 데 사용할 수 있는 size() 메서드가 있습니다.

import java.util.ArrayList;
public class LastElement {
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(10);
    list.add(15);
    list.add(20);
    list.add(25);
    System.out.printf("The list contains %d elements", list.size());
  }
}

출력:

The list contains 5 elements

ArrayList의 마지막 인덱스는 길이보다 하나 작을 것임을 알고 있습니다(0부터 시작하는 인덱싱을 따르기 때문에). 이 정보를 사용하여 마지막 요소를 가져올 수 있습니다. ArrayList의 get() 메서드를 사용하여 마지막 요소를 가져옵니다.

import java.util.ArrayList;
public class LastElement {
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(10);
    list.add(15);
    list.add(20);
    list.add(25);
    int lastIdx = list.size() - 1;
    int lastElement = list.get(lastIdx);
    System.out.println("The last index of list is: " + lastIdx);
    System.out.print("The last element of list is: " + lastElement);
  }
}

출력:

The last index of list is: 4The last element of list is: 25

동일한 논리를 반복해서 작성하지 않도록 제네릭 메서드를 작성해 보겠습니다.

import java.util.ArrayList;
public class LastElement {
  public static <E> E getLastElement(ArrayList<E> list) {
    int lastIdx = list.size() - 1;
    E lastElement = list.get(lastIdx);
    return lastElement;
  }
  public static void main(String[] args) {
    ArrayList<Integer> list1 = new ArrayList<Integer>();
    list1.add(5);
    list1.add(10);
    list1.add(15);
    list1.add(20);
    list1.add(25);
    ArrayList<String> list2 = new ArrayList<String>();
    list2.add("1");
    list2.add("2");
    list2.add("3");
    System.out.println("The last element of list1 is: " + getLastElement(list1));
    System.out.print("The last element of list2 is: " + getLastElement(list2));
  }
}

출력:

The last element of list1 is: 25
The last element of list2 is: 3

빈 ArrayList에서 메서드를 실행하면 어떻게 될까요? 빈 목록에서 위의 코드를 실행하면 IndexOutOfBoundsException이 발생합니다. 이것은 size() 메서드가 빈 ArrayList에 대해 0을 반환하고 여기서 1을 빼면 인덱스로 -1이 되기 때문에 발생합니다. 마이너스 지수는 없습니다. 다음 예제에서는 이 예외를 반환합니다.

import java.util.ArrayList;
public class LastElement {
  public static <E> E getLastElement(ArrayList<E> list) {
    int lastIdx = list.size() - 1;
    E lastElement = list.get(lastIdx);
    return lastElement;
  }
  public static void main(String[] args) {
    ArrayList<Integer> list1 = new ArrayList<Integer>();
    System.out.println("The last element of list1 is: " + getLastElement(list1));
  }
}

size() 메서드를 실행하기 전에 몇 가지 조건을 확인합시다. isEmpty() 메서드를 사용하여 목록이 비어 있는지 확인합니다.

import java.util.ArrayList;
public class LastElement {
  public static <E> E getLastElement(ArrayList<E> list) {
    if ((list != null) && (list.isEmpty() == false)) {
      int lastIdx = list.size() - 1;
      E lastElement = list.get(lastIdx);
      return lastElement;
    } else
      return null;
  }
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    System.out.println("The last element of list is: " + getLastElement(list));
  }
}

출력:

The last element of list is: null

Java에서 ArrayListLinkedList로 변환

ArrayList와 마찬가지로 LinkedList 클래스는 List 인터페이스를 구현합니다. LinkedList 클래스에는 목록의 마지막 요소를 가져오는 데 사용할 수 있는 간단한 getLast() 메서드가 있습니다.

ArrayListLinkedList로 변환할 수 있다면 이 방법을 사용할 수 있습니다. 이 프로세스는 원래 ArrayList를 수정하지 않습니다.

import java.util.ArrayList;
import java.util.LinkedList public class LastElement {
  public static <E> E getLastElementUsingLinkedList(ArrayList<E> arrList) {
    LinkedList<E> linkedList = new LinkedList<E>(arrList);
    return linkedList.getLast();
  }
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(10);
    list.add(15);
    list.add(20);
    list.add(25);
    System.out.println("The last element of list is: " + getLastElementUsingLinkedList(list));
    System.out.print("The array list is: " + list);
  }
}

출력:

The last element of list is: 25
The array list is: [5, 10, 15, 20, 25]

위의 솔루션은 마지막 요소를 가져오는 우아한 방법이 아니며 권장하지 않습니다. 마지막 요소에 여러 번 액세스해야 하는 경우 ArrayList 대신 LinkedList(또는 다른 컬렉션)를 사용하는 것이 좋습니다.

Java에서 ArrayListArrayDeque로 변환

데크는 양방향 큐입니다. ArrayDeque는 크기 조정이 가능한 배열 기능과 deque 데이터 구조를 결합합니다. LinkedList와 마찬가지로 ArrayDeque에는 데크의 마지막 요소를 보는 데 사용할 수 있는 편리한 getLast() 메서드도 있습니다. 이 메서드를 사용하려면 ArrayList를 ArrayDeque로 변환하기만 하면 됩니다.

import java.util.ArrayDeque;
import java.util.ArrayList;
public class LastElement {
  public static <E> Object getLastElementUsingArrayDeque(ArrayList<E> arrList) {
    ArrayDeque<E> deque = new ArrayDeque<E>(arrList);
    return deque.getLast();
  }
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(10);
    list.add(15);
    list.add(20);
    list.add(25);
    System.out.println("The last element of list is: " + getLastElementUsingArrayDeque(list));
    System.out.print("The array list is: " + list);
  }
}

다시 말하지만, 이 방법은 그다지 우아하지 않으며 마지막 요소에 여러 번 액세스해야 하는 경우 ArrayList 대신 ArrayDeque를 사용하는 것이 좋습니다.

구아바 라이브러리 사용하기

Google Guava 라이브러리는 ArrayList에서 마지막 요소를 가져오는 쉬운 방법을 제공합니다. 이 라이브러리의 Iterables 클래스의 getLast() 메서드를 사용하여 마지막 요소를 가져옵니다. 다음 코드를 실행하기 전에 이 라이브러리를 다운로드하여 프로젝트에 추가해야 합니다.

import com.google.common.collect.Iterables;
import java.util.ArrayList;
public class LastElement {
  public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(10);
    list.add(15);
    list.add(20);
    list.add(25);
    Integer lastEle = Iterables.getLast(list);
    System.out.print("The last element of the array list is: " + lastEle);
  }
}

출력:

The last element of the array list is: 25

목록이 비어 있는 경우 표시할 getLast() 메서드에 기본값을 제공할 수도 있습니다. 이렇게 하면 Java에서 예외가 발생하지 않습니다.

import com.google.common.collect.Iterables;
import java.util.ArrayList;
public class LastElement {
  public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    String lastEle = Iterables.getLast(list, "No Element Found"); // No Element Found is the
                                                                  // default value
    System.out.print("The last element of the array list is: " + lastEle);
  }
}

출력:

The last element of the array list is: No Element Found

요약

ArrayList는 제한된 크기의 일반 배열 문제를 제거하는 데 주로 사용되는 매우 일반적인 데이터 구조입니다. 많은 경우 목록의 마지막 인덱스를 모를 수 있으므로 목록에 저장된 마지막 요소를 찾을 수 없습니다.

size()get() 메소드를 사용하여 이 요소를 볼 수 있습니다. Google Guava 라이브러리는 마지막 요소를 쉽게 가져올 수 있는 방법도 제공합니다.

마지막 요소에 자주 액세스해야 하는 경우 LinkedList 또는 ArrayDeque와 같은 다른 컬렉션을 사용하는 것이 좋습니다. 이러한 컬렉션에는 필요한 메서드가 있기 때문입니다.

관련 문장 - Java ArrayList