ArrayList의 마지막 값을 어떻게 얻을 수 있습니까?
ArrayList의 마지막 색인을 모르겠습니다.
getLast()
ArrayList의 마지막 값을 어떻게 얻을 수 있습니까?
ArrayList의 마지막 색인을 모르겠습니다.
getLast()
답변:
다음은 List
인터페이스 (ArrayList가 구현하는)의 일부입니다 .
E e = list.get(list.size() - 1);
E
요소 유형입니다. 목록이 비어 get
있으면를 던집니다 IndexOutOfBoundsException
. 전체 API 설명서는 여기에서 찾을 수 있습니다 .
lastElement()
메소드 를 구현하기로 결정 Vector
했지만 이해할 수 없는지 이해할 수 없습니다 ArrayList
. 그 불일치가 무엇입니까?
바닐라 자바에는 우아한 방법이 없습니다.
구글 구아바 라이브러리는 중대하다 - 자신의 체크 아웃 Iterables
클래스를 . 이 방법은 일반적인 접근 방식 과 NoSuchElementException
마찬가지로 목록이 비어 있는 경우 를 던집니다. 훨씬 더 좋 거나 기본값을 지정하는 기능이 있습니다.IndexOutOfBoundsException
size()-1
NoSuchElementException
lastElement = Iterables.getLast(iterableList);
예외 대신 목록이 비어있는 경우 기본값을 제공 할 수도 있습니다.
lastElement = Iterables.getLast(iterableList, null);
또는 옵션을 사용하는 경우 :
lastElementRaw = Iterables.getLast(iterableList, null);
lastElement = (lastElementRaw == null) ? Option.none() : Option.some(lastElementRaw);
Iterables.getLast
여부 를 확인 RandomAccess
하여 O (1)의 항목에 액세스 하는지 확인 해야합니다 .
Option
기본 Java를 사용할 수 있습니다 Optional
. 또한 약간 더 깨끗 lastElement = Optional.ofNullable(lastElementRaw);
합니다.
이 작업을 수행해야합니다.
if (arrayList != null && !arrayList.isEmpty()) {
T item = arrayList.get(arrayList.size()-1);
}
목록의 마지막 (그리고 첫 번째) 요소를 얻기 위해 micro-util 클래스를 사용합니다.
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;
}
}
약간 더 유연함 :
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();
}
}
isEmpty
목록이 비어 있는지 여부를 확인하지 않으므로 isNullOrEmpty
질문의 일부가 아닙니다. 답변 세트를 향상 시키거나 유틸리티 클래스 (재발 명)를 제공하십시오.
람다 사용 :
Function<ArrayList<T>, T> getLast = a -> a.get(a.size() - 1);
당신이 할 수있는 경우를 교환 ArrayList
위해 ArrayDeque
같은 편리한 방법을 가지고있는 removeLast
.
Java에서 목록의 마지막 요소를 얻는 우아한 방법 은 없습니다 (예 : items[-1]
Python 과 비교 ).
를 사용해야 list.get(list.size()-1)
합니다.
복잡한 메소드 호출로 얻은 목록으로 작업 할 때 임시 해결책은 임시 변수입니다.
List<E> list = someObject.someMethod(someArgument, anotherObject.anotherMethod());
return list.get(list.size()-1);
이것은 추악하고 종종 비싸거나 작동하지 않는 버전을 피하는 유일한 옵션입니다.
return someObject.someMethod(someArgument, anotherObject.anotherMethod()).get(
someObject.someMethod(someArgument, anotherObject.anotherMethod()).size() - 1
);
이 디자인 결함에 대한 수정 사항이 Java API에 도입되면 좋을 것입니다.
List
. 인터페이스에 추가 할 가치가없는 드문 사용 사례입니다 . 마지막 요소에만 관심이 있다면 왜 List를 반환하는 메소드를 호출하고 싶습니까? 나는 전에 그것을 전혀 보지 못했다.
list.get(list.size()-1)
문제를 보여주는 최소한의 예입니다. 나는 "고급"예제가 논란의 여지가 있고 아마도 중요한 경우 일 수 있음에 동의합니다. 문제가 어떻게 더 전파 될 수 있는지 보여주고 싶었습니다. 의 클래스 someObject
가 외부 라이브러리에서 온 외부 클래스라고 가정합시다 .
ArrayDeque
대신 더 잘 사용하는 것입니다.
ArrayList
있습니다.
솔루션에 명시된 바와 같이 List
가 비어 IndexOutOfBoundsException
있으면가 발생합니다. 더 나은 해결책은 다음 Optional
유형 을 사용하는 것 입니다.
public class ListUtils {
public static <T> Optional<T> last(List<T> list) {
return list.isEmpty() ? Optional.empty() : Optional.of(list.get(list.size() - 1));
}
}
예상 한대로 목록의 마지막 요소는 다음과 같이 반환됩니다 Optional
.
var list = List.of(10, 20, 30);
assert ListUtils.last(list).orElse(-1) == 30;
또한 빈 목록도 정상적으로 처리합니다.
var emptyList = List.<Integer>of();
assert ListUtils.last(emptyList).orElse(-1) == -1;
당신이 대신 LinkedList의를 사용하는 경우에는 첫 번째 요소와 단지와 마지막에 액세스 할 수 있습니다 getFirst()
와 getLast()
()는 (크기보다 깔끔한 방법을 원하는 경우) -1 (0 얻을)
연결리스트 선언
LinkedList<Object> mLinkedList = new LinkedList<>();
그런 다음 이것이 원하는 것을 얻는 데 사용할 수있는 방법입니다.이 경우 우리는 목록의 첫 번째 요소 와 마지막 요소에 대해 이야기하고 있습니다.
/**
* Returns the first element in this list.
*
* @return the first element in this list
* @throws NoSuchElementException if this list is empty
*/
public E getFirst() {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return f.item;
}
/**
* Returns the last element in this list.
*
* @return the last element in this list
* @throws NoSuchElementException if this list is empty
*/
public E getLast() {
final Node<E> l = last;
if (l == null)
throw new NoSuchElementException();
return l.item;
}
/**
* Removes and returns the first element from this list.
*
* @return the first element from this list
* @throws NoSuchElementException if this list is empty
*/
public E removeFirst() {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return unlinkFirst(f);
}
/**
* Removes and returns the last element from this list.
*
* @return the last element from this list
* @throws NoSuchElementException if this list is empty
*/
public E removeLast() {
final Node<E> l = last;
if (l == null)
throw new NoSuchElementException();
return unlinkLast(l);
}
/**
* Inserts the specified element at the beginning of this list.
*
* @param e the element to add
*/
public void addFirst(E e) {
linkFirst(e);
}
/**
* Appends the specified element to the end of this list.
*
* <p>This method is equivalent to {@link #add}.
*
* @param e the element to add
*/
public void addLast(E e) {
linkLast(e);
}
그래서, 당신은 사용할 수 있습니다
mLinkedList.getLast();
목록의 마지막 요소를 가져옵니다.
목록의 마지막 항목은 list.size() - 1
입니다. 컬렉션은 배열에 의해 지원되며 배열은 인덱스 0에서 시작합니다.
따라서 목록의 요소 1이 배열의 인덱스 0에 있습니다.
목록의 요소 2가 배열의 인덱스 1에 있습니다.
목록의 요소 3이 배열의 인덱스 2에 있습니다.
등등..
어때요 .. 수업 어딘가에 ...
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;
}
목록을 수정하면 listIterator()
마지막 색인 ( size()-1
각각) 을 사용 하고 반복하십시오 . 다시 실패하면 목록 구조를 확인하십시오.
arraylist의 마지막 값을 얻으려면 size ()를 사용하면됩니다. 예를 들어. 정수 목록을 배열하면 마지막 값을 얻으려면
int lastValue = arrList.get(arrList.size()-1);
Arraylist의 요소는 인덱스 값을 사용하여 액세스 할 수 있습니다. 따라서 일반적으로 ArrayLists는 항목을 검색하는 데 사용됩니다.
Kotlin에서는 다음 방법을 사용할 수 있습니다 last
.
val lastItem = list.last()