사용 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을 반환합니다.