728x90
반응형
SMALL
List, Set, Map, HashMap의 차이에 대해서 설명해주세요.
- List : 순서가 있는 컬렉션을 정의
- 사용자가 요소의 취치를 정확하게 제어 가능
- 요소의 중복을 허용하며, 인덱스를 기반으로 요소에 접근(ArrayList, LinkedList 등이 이에 속함 등)
- 저장공간이 필요에 의해 자동으로 늘어난다.(순서가 있는 저장공간)
- 특징 : 순서가 있고, 중복을 허용(배열과 유사)
- 장점 : 가변적인 배열 (배열이 자동으로 늘어남)
- 단점 : 원하는 데이터가 뒤쪽에 위치하는 경우 속도의 문제
- 방식 : equals()를 이용한 데이터 검색
자바에서 List자료 구조는 크게 vector, arrayList, LinkedList로 나눠진다.
1) ArrayList : 객체 내부에 있는 배열에 데이터 저장
- 가변적인 배열로, 배열의 크기를 동적으로 변경할 수 있음
- 일반적인 배열과 달리 ArrayList는 크기를 미리 지정할 필요가 없으며, 요소를 추가하거나 제거함에 따라 자동으로 크기가 조절됨
- 상당히 빠르고 크기를 맘대로 조절할 수 있는 배열
- 단방향 포인터 구조로 자료에 대한 순차적인 접근에 강점
ArrayList 특징
- 동적 크기 : 요소가 추가되거나 제거될 때마다 자동으로 크기가 조정되는 동적배열
- 인덱스 접근 : 인덱스 기반의 자료구조로, 특정 위치의 요소에 빠르게 접근가능
- 순서 유지 : 요소를 추가한 순서대로 요소를 저장함, 요소의 순서를 유지
- 중복 허용 : 동일한 요소를 여러 번 포함할 수 있음
- Null 요소 허용 : null 요소를 허용함
- 데이터를 순서대로 저장하고 빠르게 접근해야 하는 경우 매우 유용함 중간에 요소를 삽입하거나 삭제하는 연산은 비효율적이므로, 이런 경우 LinkedList 같은 다른 자료구조를 고려하는 것이 좋음
2) Vector : ArrayList와 동일하게 사용이 가능
- ArrayList의 구형버전이며, 모든 메소드가 동기회 됨
- 잘 쓰이진 않음
Vector 특징
- 동적 크기 : 요소가 추가되거나 제거될 때마다 자동으로 조정되는 동적 배열
- 인덱스 접근 : 특정 위치의 요소에 빠르게 접근할 수 있음
- 순서 유지 : 요소를 추가한 순서ㅐ로 요소를 저장하므로, 요소의 순서를 유지
- 중복 허용 : 동일한 요소를 여러 번 포함할 수 있음
- Null 요소 허용 : null 요소를 허용함
- 스레드 안전 : 모든 메서드는 동기화되어 있어 여러 스레드가 동시에 Vector를 수정하는 경우에도 데이터의 일관성이 유지함
- 여러 스레드가 동시에 데이터를 수정해야 하는 병렬 처리 상황에서 매우 유용함 하지만, 동기화는 성능을 저하시킬 수 있으므로, 단일 스레드 환경에서는 ArrayList를 사용하는 것이 더 효율적일 수 있음
Arraylist와 Vector의 차이점
- 한 데이터에 동시접속이 발생했을 때 처리가 가능한 기능이 있나 없나의 차이점
- 동시 접속을 고려하여 만들어진 리스트가 Vector이다
- Arraylist는 동시접속을 고려안하고 가볍다는 장점이 있다.
3) Linkedlist
- 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 빠른 성능 보장
- 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임
- lterator 사용
- 노드가 다음 노드와 이전 노드를 참조하는 방식으로 데이터 저장
- 각 요소가 이전 요소와 다음 요소의 정보를 가지고 있는 것이 “연결 리스트”의 특정
Linkedlist 특징
- 동적 크기 : 요소가 추가되거나 제거될 대마다 자동으로 크기 조정됨
- 요소의 삽입 및 삭제 효율성 : 중간에 요소를 삽입하거나 삭제하는 것이 매우 효율적, 노드 간의 연결만 변경하면 되기 때문
- 순서 유지 : 요소를 추가한 순서대로 요소를 저장하므로, 요소의 순서를 유지함
- 중복 허용 : 동일한 요소를 여러 번 포함함
- Null 요소 허용 : null 요소를 허용함Iterator 추출 전용 인터페이스
- 데이터를 추출하기 위한 데이터 임시 저장공간
- 주로 순서가 없는 자료구조의 값들을 추출할 때 사용
- 보통 hasNext와 next 메소드를 이용한 while문으로 값을 추출한다.
- LinkedList는 인덱스를 이용한 빠른 접근이 상대적으로 느림 특정 위치의 요소를 찾기 위해서는 처음 또는 끝에서부터 해당 위치까지 순차적으로 이동해야하기 때문 LinkedList는 자주 요소의 삽입이나 삭제가 발생하고, 인덱스를 이용한 접근이 빈번하지 않은 상황에서 효율적으로 사용할 수 있음
linked 특성상 항상 처음부터 같은 경로를 반복적으로 지나면서 데이터의 위치를 검색해야하기 때문에 마지막으로 접근한 데이터를
기준으로 그 다음 데이터를 알아내는 것이 더 쉽다
2. Set : 터페이스는 중복을 허용하지 않는 컬렉션을 정의
- 중복되지 않는 숫자(데이터)를 구할 때 사용하면 유용
- 같은 요소가 한 번 이상 Set에 포함될 수 없음
- 대부분의 Set 구현체는 요소의 순서를 보장하지 않으며, 이들 요소에는 인덱스가 없음
- HashSet, TreeSet 등이 이에 속함
- 특징 : 순서가 없고, 중복을 허용하지 않음
- 장점 : 빠른 속도
- 단점 : 단순 집합의 개념으로 정렬하려면 별도의 처리가 필요함
hashSet의 key값은 hashcode 비교에 의해 중복여부가 확인된다.
hashCode()를 가지고 비교하고 ==로 비교해서 true를 리턴하거나 equals()로 비교해서 true를 리턴하는지 체크
element를 덮어 쓸 것인지 결정하면 된다.
Hashset은 Iterator를 사용한다
왜냐하면, set은 순서가 없기 때문에 데이터에 순서를 정해 추출해야한다.
3. Map : 키와 값 쌍의 컬렉션을 정의
- 키의 중복을 허용하지 않지만 다른 키에 대해 동일한 값을 가질 수 있음
- Map 인터페이스를 사용하면 키를 이용하여 값을 검색할 수 있음
- HashMap, TreeMap, LinkedHashMap 등이 이에 속함
- 특징 : Key(키)랑 Value(값)으로 나눠서 데이터 관리, 순서는 없으며, 키에 대한 중복은 없음
- 장점 : 빠른 속도
- 단점 : Key의 검색 속도가 검색 속도를 좌우함
4. HashMap : Map 인터페이스의 한 구현체로서, 객체들을 해시 함수를 통해 해시값으로 변환하고 이를 인덱스로 사용하여 데이터를 저장하고 검색하는 자료구조
- 해시 충돌(hash collision)이 발생할 경우, LinkedList 혹은 TreeNode 형태로 체이닝되어 저장됨
- HashMap은 순서를 보장하지 않음
- index번호 대신 키값으로 값을 찾는 맵형태의 자료구조도 iterator 클래스를 이용해서 키값을 순서대로 iterator에 저장해두면 순서대로 데이터 추출이 가능하다.
728x90
반응형
LIST
'일상 > 스터디' 카테고리의 다른 글
4일차 과제 - 스프링 컨테이너 (0) | 2023.05.12 |
---|---|
3일차 과제 제네릭, 컬렉션 클래스 (0) | 2023.05.12 |
3일차 과제 - JPA의 영속성 컨텍스트 (1) | 2023.05.10 |
2일차 과제 Spring MVC - 예외 처리 기법 (0) | 2023.05.10 |
2일차 과제 - DI(Dependency Injection) (1) | 2023.05.09 |