HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
자바 콜렉션
자바 콜렉션
/
🚃
List
🚃

List

 
그 이름도 유명한 리스트 인터페이스를 학습해보자.
package java.util; ... public interface List<E> extends Collection<E> { int size(); ... }
java.util.List

List

  • Ordered collection 혹은 sequence 임.
  • 각 원소들이 삽입되는 위치에 대한 정확한 컨트롤을 해야함
  • integer index 를 사용해 각 원소에 접근할 수 있음
 
  • Set 과 달리 일반적으로 중복 원소를 허용함
    • formally, e1.equals(e2) 가 true인 경우
  • 역시 일반적으로 multiple null원소를 허용함
 
  • Collction에 정의 된 iterator, add, remove, equals, and hashCode 메소드를 포함하여 추가적인 기능을 선언함

  • Lists 는 Java 배열과 마찬가지로 zero based임
  • List 인터페이스는 인덱스를 사용해 list의 원소에 접근하는 네가지 메서드를 제공함
  • 리스트의 몇몇 구현에서 원소에 접근하는 연산은 O(n) 임
    • e.g.) Linkedlist
    • 따라서 List 구현체의 내부 구현을 자세히 모른다면 list 를 깡으로 iterating 하는 것은 삼가해야함

  • List 인터페이스는 특별한 iterator인 ListIterator를 제공함
  • List 인터페이스는 특정 index이후의 iterator를 제공하는 api를 제공하기도 함
 
  • List 인터페이스는 특정 객체를 조회하는 메서드를 두가지 제공함
    • 퍼포먼스적 측면에서 이 메서드는 조심해서 사용해야함, 대부분의 구현에서 그냥 선형 탐색을함
 
  • List 인터페이스는 임의의 인덱스의 인련의 원소에 대한 효율적인 삽입, 삭제 메서드를 두가지 제공함
 
  • List의 List 를 가지는 것은 허용되지만 매우 주의해서 사용해야함, eqauls and hashCode 메소드는 그런 List 에 대해서 잘 정의되지 않음

Unmodifiable Lists
List.of, List.copyOf - unmodifiable list 를 생성하는 정적 팩토리 메서드
  • 원소를 add, remove, replace 하는 어떠한 종류의 메서드도 허용되지 않음
    • UnsupportedOperationException
  • null 을 담을 수 없음
    • NullPointerException
  • 모든 element가 serializable → 얘네도 serializable

 
  • (일반적으로 상수타임의) 빠른 인덱스 접근을 지원하는 List를 random access list 라고함
    • 그렇지 않은 List 는 sequential access list 라고 부름
    • RandomAccess 라는 마커 인터페이스를 통해 램덤 액세르를 지원하는 것을 동네방네 자랑할 수 있음
    • public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { ... }
    • RandomAccess 인터페이스를 확인 하여 제네릭으로 index 접근 알고리즘을 제공할 수 있음
    •