[java] java : ArrayList-인덱스가 있는지 어떻게 확인할 수 있습니까?

사용 ArrayList<String>중이며 특정 인덱스에 데이터를 추가합니다. 특정 인덱스가 있는지 어떻게 확인할 수 있습니까?

간단하게 get()값을 확인 해야합니까 ? 아니면 예외를 기다려야합니까? 다른 방법이 있습니까?

최신 정보

답변 해주셔서 감사합니다.하지만 특정 지수에만 항목을 추가하고 있기 때문에 목록의 길이가 사용 가능한 항목을 표시하지 않습니다.



답변

이 메서드 arrayList.size() 목록의 항목 수를 반환 하므로 인덱스가보다 크거나 같으면 size()존재하지 않습니다.

if(index >= myList.size()){
  //index not exists
}else{
 // index exists
}


답변

선형 항목이있는 목록에서 작동하는 목록 크기 사용에 대한 12 가지 제안을 받았지만 아무도 귀하의 질문을 읽지 않은 것 같습니다.

다른 색인에 항목을 수동으로 추가하면 특정 색인을 확인해야하므로 이러한 제안이 작동하지 않습니다.

사용 (list.get (인덱스) == NULL) 경우 중 하나가 작동하지 않습니다) (GET으로하는 대신에 널 (null)을 반환의 예외가 발생합니다.

이 시도:

try {
    list.get( index );
} catch ( IndexOutOfBoundsException e ) {
    list.add( index, new Object() );
}

여기에 색인이 없으면 새 항목이 추가됩니다. 다른 작업을 수행하도록 변경할 수 있습니다.


답변

이것이 필요한 것입니다 …

public boolean indexExists(final List list, final int index) {
    return index >= 0 && index < list.size();
}

평범한 오래된 배열을 사용하지 않는 이유는 무엇입니까? 목록에 대한 색인화 된 액세스는 제 생각에 코드 냄새입니다.


답변

일반적으로 인덱스가 배열 크기보다 작은 지 확인합니다.

if (index < list.size()) {
    ...
}

인덱스가 음수 값이 아닌지 염려되는 경우 다음을 사용하십시오.

if (index >= 0 && index < list.size()) {
    ...
}


답변

업데이트와 관련하여 (아마도 다른 질문이 될 것입니다). ArrayList 대신 이러한 개체의 배열을 사용해야하므로 null 값을 간단히 확인할 수 있습니다.

Object[] array = new Object[MAX_ENTRIES];
..
if ( array[ 8 ] == null ) {
   // not available
}
else {
   // do something
}

모범 사례

배열에 수백 개의 항목이 없으면 매직 넘버 3,8 등을 제거하기 위해 클래스로 구성하는 것을 고려해야합니다.

예외를 사용한 제어 흐름은 나쁜 습관입니다.


답변

java-9인덱스가 배열에 속하는지 확인하는 표준 방법이 있으므로 Objects # checkIndex () :

List<Integer> ints = List.of(1,2,3);
System.out.println(Objects.checkIndex(1,ints.size())); // 1
System.out.println(Objects.checkIndex(10,ints.size())); //IndexOutOfBoundsException


답변

방법을 ArrayList사용하여의 크기를 확인할 수 있습니다 size(). 최대 인덱스 +1을 반환합니다.