른록노트

[DataStructure] List (Java) 본문

Programming/[DataStructure]

[DataStructure] List (Java)

른록 2022. 1. 19. 20:55

1. List

Java11

Module java.base
Package java.util
Interface List<E>

Type Parameters:
E - the type of elements in this list

All Superinterfaces:
Collection<E>, Iterable<E>

All Known Implementing Classes:
AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector
public interface List<E>
extends Collection<E>

순서가 지정된 컬렉션(시퀀스라고도 함). 이 인터페이스의 사용자는 목록에서 각 요소가 삽입되는 위치를 정밀하게 제어할 수 있습니다. 사용자는 정수 인덱스(목록에서의 위치)로 요소에 액세스하고 목록에서 요소를 검색할 수 있습니다.

set과 달리 list는 일반적으로 중복된 element들을 허용합니다. 더 공식적으로, list는 일반적으로 e1.equals(e2)와 같은 요소 e1과 e2의 쌍을 허용하고 일반적으로 null 요소를 허용하는 경우 여러 null 요소를 허용합니다. 사용자가 삽입을 시도할 때 런타임 예외를 throw하여 중복을 금지하는 목록을 구현하려는 사람은 상상할 수 없지만 이러한 사용은 드물 것으로 예상됩니다.

List 인터페이스는 Collection 인터페이스에 지정된 것 외에 iterator, add, remove, equals 및 hashCode 메소드의 계약에 대한 추가 규정을 배치합니다. 편의를 위해 다른 상속된 메서드에 대한 선언도 여기에 포함됩니다.

List 인터페이스는 list 요소에 대한 위치(인덱싱된) 액세스를 위한 네 가지 방법을 제공합니다.
List(Java 배열과 같은)는 0 기반입니다. 이러한 작업은 일부 구현(예: LinkedList 클래스)의 경우 인덱스 값에 비례하여 시간에 따라 실행될 수 있습니다. 따라서 호출자가 구현을 알지 못하는 경우 일반적으로 list의 요소를 반복하는 것이 list를 통해 인덱싱하는 것보다 더 좋습니다.

List 인터페이스는 Iterator 인터페이스가 제공하는 일반 작업 외에도 요소 삽입 및 교체, 양방향 액세스를 허용하는 ListIterator라고 하는 특수 반복자를 제공합니다. list의 지정된 위치에서 시작하는 list 반복자를 얻기 위한 메소드가 제공됩니다.

List 인터페이스는 지정된 객체를 검색하는 두 가지 방법을 제공합니다. 성능 관점에서 이러한 방법은 주의해서 사용해야 합니다. 많은 구현에서 비용이 많이 드는 선형 검색을 수행합니다.

List 인터페이스는 list의 임의 지점에서 여러 요소를 효율적으로 삽입 및 제거하는 두 가지 방법을 제공합니다.

참고: list가 요소로 포함되는 것은 허용되지만, equals 및 hashCode 메소드는 더 이상 그러한 list에서 잘 정의되지 않습니다.

일부 list 구현에는 포함할 수 있는 요소에 대한 제한이 있습니다. 예를 들어, 일부 구현에서는 null 요소를 금지하고 일부 구현에서는 해당 요소의 유형에 제한이 있습니다. 부적격 요소를 추가하려고 하면 확인되지 않은 예외(일반적으로 NullPointerException 또는 ClassCastException)가 발생합니다. 부적격 요소의 존재를 쿼리하려고 하면 예외가 발생하거나 단순히 false를 반환할 수 있습니다. 일부 구현은 전자의 동작을 나타내고 일부는 후자를 나타냅니다. 보다 일반적으로, 완료로 인해 부적격 요소가 목록에 삽입되지 않는 부적격 요소에 대한 작업을 시도하면 구현 옵션에 따라 예외가 발생하거나 성공할 수 있습니다. 이러한 예외는 이 인터페이스의 사양에서 "선택 사항"으로 표시됩니다.

Unmodifiable Lists(수정이 불가능한 List)
List.of 및 List.copyOf 정적 팩토리 메서드는 수정할 수 없는 목록을 만드는 편리한 방법을 제공합니다. 이러한 메서드로 생성된 List 인스턴스에는 다음과 같은 특징이 있습니다.

  • 수정할 수 없습니다. 요소를 추가, 제거 또는 교체할 수 없습니다. List에서 mutator 메서드를 호출하면 항상 UnsupportedOperationException이 발생합니다. 그러나 포함된 요소 자체가 변경 가능한 경우 목록의 내용이 변경된 것처럼 보일 수 있습니다.
  • null 요소를 허용하지 않습니다. null 요소로 생성하려고 하면 NullPointerException이 발생합니다.
  • 모든 요소가 직렬화 가능한 경우 직렬화 가능합니다.
  • list의 요소 순서는 제공된 인수 또는 제공된 배열의 요소 순서와 동일합니다.
  • 그들은 value 기반입니다. 호출자는 반환된 인스턴스의 ID에 대해 가정해서는 안 됩니다. 팩토리는 새로운 인스턴스를 생성하거나 기존 인스턴스를 재사용할 수 있습니다. 따라서 이러한 인스턴스에서 ID에 민감한 작업(참조 같음(==), ID 해시 코드 및 동기화)은 신뢰할 수 없으므로 피해야 합니다.
  • 직렬화된 양식 페이지에 지정된 대로 직렬화됩니다.
    이 인터페이스는 Java Collections Framework의 구성원입니다.

Since:
1.2
See Also:
Collection, Set, ArrayList, LinkedList, Vector, Arrays.asList(Object[]), Collections.nCopies(int, Object), Collections.EMPTY_LIST, AbstractList, AbstractSequentialList

반응형
Comments