본문 바로가기
Java

[Java] List와 Set, Map

by Bhinney 2023. 1. 4.

면접 준비를 하며, 각 개념에 대해 차이를 알고자 공부하였다.

정확하지 않을 수 있다.

계속해서 수정 예정.


📍 공통점

  • 세 가지는 컬렉션 프레임워크의 주요 인터페이스
  • 컬렉션이란 여러 데이터들의 집합을 의미
  • 이런 컬렉션을 다루는 데에 있어서 편리한 메서드를 미리 정의해 놓은 것이 컬렉션 프레임워크
  • 컬렉션 프레임워크는 특정 자료 구조에 데이터를 추가, 삭제, 수정, 검색 등의 동작을 수행하는 편리한 메서드들을 제공

 

📍 차이점

  • List와 Set은 Collection 인터페이스를 상속받지만, 구조상의 차이로 Map 인터페이스는 별도로 정의됨
1️⃣ List
  • 순서와 중복이 있는 자료 구조
  • 대표적으로 ArrayList와 LinkedList가 존재
ArrayList
  • 배열 리스트
  • 객체 내부에 있는 배열에 값을 저장
  • 배열처럼 인덱스를 통해 데이터 접근이 쉬움
  • 데이터를 순차적으로 저장하거나 마지막 데이터를 삭제할 때에 유리
  • 중간 위치에 데이터를 추가하거나 삭제할 때에는 해당 데이터의 뒤에 위치한 값을 밀어주거나 당겨와야하기 때문에 속도가 저하

 

LinkedList
  • 삭제와 삽입에 유리한 리스트
  • 배열은 모든 데이터가 연속적으로 존재하지만 LinkedList는 불연속적으로 존재하며, 연결되어 있음
  • 하나의 데이터 값과, 해당 데이터 이전과 다음 데이터의 주소가 같이 저장
  • 삽입 혹은 삭제 시에 주소값만 변경하면 되므로 다른 요소들을 이동시킬 필요가 없음
  • 데이터 검색에 있어서는 어레이리스트보다 상대적으로 속도가 느릴 수 있음
  • 데이터의 양이 많을 때, 원하는 데이터가 뒤 쪽에 위치한다면 속도에 문제가 있음
  • 순회하기 때문

2️⃣ Set
  • 순서와 중복이 없는 자료 구조
  • 따라서 중복을 자동으로 제거해줌
  • 하나의 집합이라고 생각하면 좋음
  • 검색 속도가 빠름
  • 인덱스를 통해 객체를 가져오는 메서드가 존재하지 않음
  • 따라서 Iterator를 사용해서 데이터를 가져올 수 있음
  • 대표적으로 HashSet과 TreeSet, LinkedHashSet 이 존재

 

HashSet
  • Hashing을 이용해서 구현한 컬렉션
  • 데이터를 중복 저장할 수 없고, 순서를 보장하지 않음
  • equals()나 hashCode()를 오버라이딩해서 인스턴스가 달라도 동일 객체를 구분해 중복 저장을 막을 수 있음

 

TreeSet
  • 이진 탐색 트리 형태로 데이터를 저장
  • 데이터 추가, 삭제에는 시간이 더 걸리지만 검색과 정렬이 뛰어남
  • 기본적으로 데이터를 오름차순으로 정렬

 

LinkedHashSet
  • HashSet 클래스를 상속 받은 LinkedList
  • 데이터에 삽입된 순서대로 데이터를 관리

3️⃣ Map
  • 키와 값을 하나의 쌍으로 가지고 있는 자료 구조
  • 예 : 아이디(키) - 비밀번호(값)
  • 키는 중복이 불가, 값은 중복이 가능
  • 순서가 존재하지 않음
  • 검색 속도가 빠름
  • 데이터를 순회하려면, Set으로 변환 후 Iterator를 사용해야 함
  • 대표적으로 HashMap 존재

 

댓글