기록용 블로그

[자료구조] 1. List, Set, Map 본문

개발/알고리즘 공부

[자료구조] 1. List, Set, Map

andjane 2023. 4. 20. 23:09

 
 

1. List

List 내부 구조

 
1) 특징 
순서가 있다
중복을 허용한다
- 인덱스를 통한 원소 접근
- 가변적인 크기
 
 
2) 종류

리스트특징
ArrayList- 배열 + 리스트 : 객체 내부에 배열에 데이터 저장
- 단방향 포인터 구조로 자료에 대한 순차적인 접근에 강점
- 빠르고, 크기를 맘대로 조절할 수 있다.
LinkedList- 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 때 성능 보장
- 스택, 큐 등을 만들기 위한 용도로 사용한다.
- Iterator를 사용한다. (Iterator : 순서가 없는 자료구조의 값을 추출할 때 사용. hasNext 와 next 메소드 이용)
Vector- ArrayList의 구버전이며, 잘 쓰이진 않는다.

 
 
3) 배열과의 차이점
- 인덱스의 역할 : 배열은 인덱스가 유일무이한 식별자이지만, 리스트에서는 단지 몇 번째 데이터인지 정도를 판별하는 용도이다.
데이터가 삭제되면 배열은 해당 인덱스의 데이터가 빈 상태로 유지되지만, 리스트는 해당 인덱스에 새로운 요소가 저장될 수 있다.
- 가변성 여부 : 배열은 메모리가 할당되어 있지만(크기가 할당되어 있지만), 리스트는 가변적이다. 
- 데이터 조회/삽입/삭제 : 데이터 조회 속도는 배열 > 리스트, 데이터 삽입/삭제 속도는 배열 < 리스트
 
 
4) ArrayList 사용 예시

ArrayList alist = new ArrayList();

//add
alist.add("jane");
alist.add("nova");
alist.add("sophia");

//위치 지정 add
alist.add(0, "lisa"); // 첫번째 위치에 lisa 삽입.

//get
System.out.println(alist.get(2)); //nova 출력

//size
System.out.println(alist.size()); //4 출력

//contains 
//boolean 리턴
System.out.println(alist.contains("jane")); //true 출력

//remove
//값 혹은 인덱스로 삭제 가능
System.out.println(alist.remove("nova")); //true 출력
System.out.println(alist.remove("2")); //nova 출력

 

 

2. Map 

Map 내부 구조 (key-value가 쌍을 이룬다)

 
1) 특징 
- key, value의 쌍으로 이루어진 데이터 집합
- key는 중복을 허용하지 않는다
- value는 중복을 허용한다
- 순서를 보장하지 않는다
 
 
2) 종류

특징
HashMap- key 중복 x
- 순서보장 x
- key, value 값으로 null 허용
- 검색에 뛰어난 성능
LinkedHashMap- 입력 순서 보장
HashTable- 동기화 보장
- key, value 값으로 null 허용 x
TreeMap- key값을 기준으로 오름차순 정렬
- 정렬을 해야하기 때문에 시간이 오래 걸림

 
 
3) HashMap 사용 예제

HashMap<String, String> map = new HashMap<>();

//put
map.put("이름", "제인");
map.put("취미", "피아노");

//get
System.out.println(map.get("이름")); //제인 출력

//containsKey
//키가 있으면 true, 없으면 false
System.out.println(map.containsKey("취미"));  // true 출력

//remove 
//삭제 후 해당 value 리턴
System.out.println(map.remove("이름"));  // "제인" 출력

//keySet
System.out.println(map.keySet());  // [이름, 취미] 출력

 

 

3. Set

 
1) 특징
- 순서가 없다.(Unordered)
- 중복이 허용되지 않는다
- 배열과 리스트와는 다르게 인덱스가 따로 없으므로 Iterator를 사용한다.
- 중복을 허용하지 않는 집합 자료형의 특징은 자료형의 중복을 제거하기 위한 필터 역할로 종종 사용한다.
 
 
2) 종류

특징
TreeSet- 오름차순으로 값을 정렬하여 저장
LinkedHashSet- 입력 순서 보장

 
 
3) 사용 예시

//set 예시1
HashSet<String> set1 = new HashSet<>(Arrays.asList("H", "e", "l", "l", "o"));
System.out.println(set1);  //  [e, H, l, o] 출력 --> 중복 허용 x

//set 예시2
HashSet<String> set2 = new HashSet<>();

//add
set2.add("jane");
set2.addAll(Arrays.asList("nova", "sophia"));

//remove
set2.remove("jane");

 
 
 
출처 : https://wikidocs.net/157108
https://cocoon1787.tistory.com/527
https://velog.io/@esun1903/자료구조-List-Map-Set의-특징과-차이점