Java 개념

리스트

ron_nie 2023. 8. 3. 20:36
728x90

1. 컬렉션과 제네릭

1-1. 컬렉션

  • 크기가 고정되지 않고 가변성을 확장시킨 자료구조의 모음
    • 요소의 개수에 따라 크기 자동조절
    • 요소의 삽입, 삭제에 따른 요소의 위치 자동 이동
    • 다양한 자료구조를 통해 각각의 활용성이 더해짐
  • 다양한 객체들의 삽입, 삭제, 검색 등의 관리가 용이해짐
  • Collection<E> 인터페이스를 상속받는 객체들이 이에 속함

1-2. 컬렉션의 계층 구조

1-3. 제네릭

  • 컬렉션타입 선언시 컬렉션 안에 들어가는 항목의 타입 지정
  • 컬렉션의 요소는 객체만 가능
    • 기본적으로 int, char, double 등의 기본 타입 사용 불가
      • 기본 타입은 Integer, Character, Double 등의 객체로 제네릭 선언
  • Collection<E>
    • <E> : 컬렉션의 항목 타입
  • Map<K,V>
    • <K> : 키 항목타입
    • <V> : 값 항목타입

2. List

2-1. (Linked) 리스트

  • 배열과 상반되는 특징을 가지고 있는 순서가 있는 자료구조
  • 메모리상에 항목 데이터들이 한공간에 있지 않음
  • 항목의 데이터와 다음 항목의 위치를 같이 저장하여 다음 항목을 찾아감
    • 헤더 : 다음 항목의 위치를 저장
    • 데이터 : 항목의 값을 저장
  • 항목을 추가하기가 용이함
    • 값추가 시간 복잡도 : 1
  • 항목에 접근하려면 헤더부터 시작하여 차례대로 접근
    • 접근 및 수정 시간복잡도 : n
  • 헤더의 접근 시작위치에 따라 Stack 또는 Queue 구조로 활용 가능
    • 꼬리만 접근 : Stack
    • 헤더와 꼬리 둘다 접근 : Queue, Deque

2-2. 배열 구조로 만든 리스트

  • ArrayList와 Vector 구조는 배열로 이루어져 있음
    • 크기가 조정 가능한 배열
    • 데이터가 추가되면 배열의 크기를 확장
    • Vector 는 동기화가 가능한 리스트
  • Linked보다 공간 활용성은 떨어지지만 접근 속도를 훨씬 높힐 수 있음
  • 배열의 고정크기에 대한 단점만을 극복
  • 인덱스의 접근이 많으면 ArrayList, 데이터의 추가와 헤더 접근이 많으면 LinkedList

2-3. 리스트 생성

LinkedList<Integer> linkedList = new LinkedList<Integer>

 

반응형