면접 준비를 하며, 각 개념에 대해 차이를 알고자 공부하였다.
정확하지 않을 수 있다.
계속해서 수정 예정.
📍 공통점
- 세 가지는 컬렉션 프레임워크의 주요 인터페이스
- 컬렉션이란 여러 데이터들의 집합을 의미
- 이런 컬렉션을 다루는 데에 있어서 편리한 메서드를 미리 정의해 놓은 것이 컬렉션 프레임워크
- 컬렉션 프레임워크는 특정 자료 구조에 데이터를 추가, 삭제, 수정, 검색 등의 동작을 수행하는 편리한 메서드들을 제공
📍 차이점
- 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 존재
'Java' 카테고리의 다른 글
[Java] Integer 클래스의 메서드를 이용해 숫자 진수 변환 (0) | 2023.01.28 |
---|---|
[Java] 메서드 오버로딩 VS 메서드 오버라이딩 (0) | 2022.12.28 |
[JAVA] 필드와 메서드 (0) | 2022.12.26 |
[JAVA] 클래스와 객체 (0) | 2022.12.22 |
[Java] 문자가 숫자인지 문자인지 판단하기 (Character.isDigit(), Character.isLetter()) (0) | 2022.12.22 |
댓글