
고정된 개수인 Array 는 코딩테스트를 제외하고는 실제로 사용할일은 그리 많지 않지만, List 와 비교로 필요
import java.util.Arrays;
Integer[] integer_array = new Integer[3]; // 길이 기반 Array 선언 (Integer 요소)
Integer[] integer_array = new Integer[]{1, 2, 3}; // 값 기반 Array 선언 (Integer 요소)
System.out.println(integer_array.length);
Member[] members = {
new Member(1, "Aaron"),
new Member(2, "Baron"),
new Member(3, "Caron"),
new Member(4, "Daron"),
};
가장 많이 사용하게될 자료구조로 일렬로 나열한 데이터 집합
| 특징 | ArrayList | LinkedList |
|---|---|---|
| 구조 | 배열 기반 | 이중 연결 리스트 기반 |
| 요소 접근 속도 | O(1) (인덱스 기반 접근) | O(n) (처음부터 순회 필요) |
| 삽입 삭제 속도 | O(n) (중간 삽입 / 삭제 시) | O(1) (처음 / 마지막 또는 노드 연결 변경 시) |
| 메모리 사용량 | 상대적으로 적음 | 각 노드마다 추가 메모리 필요 |
| 용도 | 읽기 작업이 많은 경우 | 삽입 / 삭제 작업이 많은 경우 |
고정 크기의 리스트로 변환된 배열을 생성하며, 이는 원본 배열과 연결되어 java.util.Arrays.ArrayList 라는 내부 정적 클래스의 객체를 반환
import java.util.Arrays;
import java.util.List;
List<Integer> integer_list = Arrays.asList(1, 3, 2);
System.out.println(integer_list.get(0));
integer_list.set(2, 2);
System.out.println(integer_list.isEmpty());
System.out.println(integer_list.size());
(n, m)이면 n부터 m-1까지
System.out.println(integer_list.subList(0, 1));
System.out.println(integer_list.contains(1));
Java의 표준 라이브러리인 java.util.ArrayList 클래스의 인스턴스를 생성
이는 동적 크기의 배열 기반 리스트로 요소 추가 및 삭제 가능
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
List<Integer> integer_arraylist = new ArrayList<>(Arrays.asList(1, 2, 3));
integer_arraylist.add(4);
integer_arraylist.remove(3);
System.out.println(integer_arraylist.sort(Integer::compareTo));
integer_arraylist.clear();
| 특징 | Arrays.asList | ArrayList<> |
|---|---|---|
| 크기 | 불가능 | 가능 |
| 원본 배열과 연계 | O | X |
| 사용 사례 | 배열을 리스트로 빠르게 변환해야할 경우 | 동적으로 요소 추가/삭제가 필요한 경우 |
| 클래스 | java.util.Arrays.ArrayList 내부 클래스 | java.util.ArrayList |
| 메모리 독립성 | 원본 배열과 연결 | 원본과 독립 |
공간이 다 차거나, 요소 중간에 삽입할 때 기존의 배열을 복사해서 요소를 뒤로 일일히 이동시키는 작업이 필요
java.util.LinkedList 클래스에서 제공하는 자료구조로, ArrayList와는 다르게 요소들을 노드로 연결하여 저장
List, Deque, Queue 인터페이스를 구현하므로 리스트, 스택, 큐의 역할을 수행
import java.util.LinkedList;
LinkedList<String> cars = new LinkedList<String>();
List 에서 Element 요소의 중복을 자체적으로 방지해주는 자료구조
| 특징 | HashSet | TreeSet |
|---|---|---|
| 저장 순서 | X | O (기본 오름차순 정렬) |
| 시간 복잡도 | 평균 O(1) (검색, 삽입, 삭제) | O(log n) (검색, 삽입, 삭제) |
| 정렬 지원 | X | 지원 (기본: 오름차순, 사용자 정의 가능) |
| Null 허용 여부 | O (1개만) | X |
| 구현 구조 | 해시 기반 | Red-Black Tree 기반 |
| 사용 목적 | 빠른 데이터 저장 및 검색 시 | 정렬된 데이터가 필요 시 |
해시 기반의 집합으로, 요소를 저장하기 위해 HashMap을 내부적으로 사용
import java.util.Arrays;
import java.util.List;
import java.util.Set;
Set<Integer> integer_set = new HashSet<>(Arrays.asList(1, 2, 3));
integer_set.add(4);
integer_set.remove(3);
integer_set.contains(1);
integer_set.clear();
integer_set.isEmpty();
integer_set.size();
이진 탐색 트리인 Red-Black Tree를 기반으로 구현된 집합으로, 요소를 정렬된 상태로 유지
import java.util.TreeSet;
TreeSet<Integer> treeSet = new TreeSet<>();
(n, m)이면 n부터 m-1까지
System.out.println(treeSet.subSet(5, 15));
Key - Value 기반 자료구조 = 데이터베이스와 유사 = Primary Key - Row(Data)
List 다음으로 많이 사용하는 자료구조로 시간복잡도를 낮추기 위해 공간복잡도를 Map 으로 늘려 활용
Entry : entrySet()
Key : keySet(), containsKey()
Value : values(), containsValue()
구현체 종류
| 특징 | HashMap | TreeMap | LinkedHashMap |
|---|---|---|---|
| 저장 순서 | X | Key 기준 정렬 | 삽입 순서 유지 |
| Null 허용 여부 | Key : 1개, Value : 여러 개 | Key : 비허용, Value : 여러 개 | Key : 1개, Value : 여러 개 |
| 시간 복잡도 | 평균 O(1) | O(log n) | 평균 O(1) |
| 구현 구조 | 해시 테이블 | Red-Black Tree | 해시 테이블 + 이중 연결 리스트 |
| 사용 목적 | 빠른 검색, 삽입, 삭제 | 정렬된 데이터 필요 | 삽입 순서 유지 필요 |
해시 테이블 기반의 Map 구현체로, 가장 일반적으로 사용
import java.util.HashMap;
Map<Integer, Integer> integer_hashmap = new HashMap<>();
integer_hashmap.put(1, 1);
integer_hashmap.put(2, 2);
integer_hashmap.put(3, 3);
integer_hashmap.get(3);
integer_hashmap.replace(4, 5);
integer_hashmap.remove(3);
System.out.println(integer_hashmap.containsKey(1));
System.out.println(integer_hashmap.containsValue(1));
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
Set<Map.Entry<Integer, Integer>> entrySet = integer_hashmap.entrySet();
for (Map.Entry<Integer, Integer> entry : entrySet) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
Set<Map.Entry<Integer, Integer>> keySet = integer_hashmap.entrySet();
Set<Integer> keys = integer_hashmap.keySet();
for (Integer key : keys) {
System.out.println("Key: " + key);
}
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
Collection<Integer> values = integer_hashmap.values();
for (Integer value : values) {
System.out.println("Value: " + value);
}
values() 를 Collection 형태로 반환하는 이유
entrySet()과 keySet()에서는 Set 내부적으로 중복 검사를 위한 추가 작업 수행
Value 값은 중복이 가능하므로 values()는 중복을 허용하는 Collection 형태로 반환
integer_hashmap.clear();
integer_hashmap.isEmpty();
integer_hashmap.size();
이진 탐색 트리인 Red-Black Tree를 기반으로 한 Map 구현체로, Key가 정렬된 상태를 유지
import java.util.TreeMap;
Map<Integer, Integer> integer_treemap = new TreeMap<>();
HashMap의 기능에 삽입 순서 유지 기능을 추가한 구현체
즉, 해시 테이블과 이중 연결 리스트를 기반
import java.util.LinkedHashMap;
LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();