컬렉션 프레임웍(1)

roglog·2021년 7월 13일
0

java의 정석

목록 보기
28/36

컬렉션 프레임웍: 데이터 군을 저장하는 클래스들을 표준화한 설계

1. 컬렉션 프레임웍의 핵심 인터페이스


  1. List
  • 순서가 있는 데이터의 집합, 데이터의 중복을 허용
  • 구현클래스: ArrayList, LinkedList. Stack, Vector 등
  1. Set
  • 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않음
  • 구현클래스: HashSet, TreeSet 등
  1. Map
  • 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합
  • 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복 허용
  • 구현클래스: HashMap, TreeMap, Hashtable, Properties 등

Collection 인터페이스

  • List와 Set의 조상

Map.Entry인터페이스

  • Map인터페이스의 내부 인터페이스
  • key-value쌍을 다루기 위해 정의 됨

2. ArrayList


  • 기존의 Vector를 개선한 것
  • Object배열을 이용해서 데이터를 순차적으로 저장
  • 배열에 더 이상 저장할 공간이 없으면 보다 큰 새로운 배열을 생성해서 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음에 저장 된다.
  • 데이터를 읽어오고 저장하는 데는 효율이 좋지만, 용량을 변경해야할 때는 새로운 배열을 생성한 후 기존의 배열로부터 새로 생성된 배열로 데이터를 복사해야하기 때문에 상당히 효율이 떨어짐

3. LinkedList


  • 배열의 단점

    1. 크기를 변경할 수 없다
      • 크기를 변경할 수 없으므로 새로운 배열을 생성해서 데이터를 복사해야 함
      • 실행속도를 향상시키기 위해서는 충분히 큰 크기의 배열을 생성해야 하므로 메모리가 낭비 됨
    2. 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다
      • 배열의 중간에 데이터를 추가하려면, 빈자리를 만들기 위해 다른 데이터들을 복사해서 이동해야 함
  • 링크드 리스트

    • 링크드 리스트는 불연속적으로 존재하는 데이터를 서로 연결한 형태로 구성
    • 이동방향이 단방향
  • 더블링크드 리스트
    : 다음 요소에 대한 참조뿐 아니라 이전 요소에 대한 참조가 가능하도록 개선

  • 더블 써큘러 링크드 리스트(이중 원형 연결리스트)
    : 더블 링크드 리스트에서 첫 번째 요소와 마지막 요소를 서로 연결시킨 것


4. ArrayList vs LinkedList


  • 순차적으로 추가/삭제하는 경우에는 ArrayList가 LinkedList보다 빠르다.

  • 중간 데이터를 추가/삭제하는 경우에는 LinkedList가 ArrayList보다 빠르다.
    => 다루고자 하는 데이터의 개수가 변하지 않는 경우라면 ArrayList가 최상의 선택이지만 데이터 개수의 변경이 잦다면 LinkedList를 사용하는 것이 더 나은 선택이 될 것임

    컬렉션읽기(접근시간)추가/삭제비고
    ArrayList빠르다느리다순차적인 추가삭제는 더 빠름 / 비효율적인 메모리 사용
    LinkedList느리다빠르다데이터가 많을수록 접근성이 떨어짐

java의 정석 chapter11

profile
Full Stack Developer 📚

0개의 댓글