정리용/java
[JAVA] 기초 5. Array와 Collection
hee-ya07
2025. 1. 23. 22:06
1. Array
- 배열
:: 길이가 고정된 값의 나열
:: 길이가 고정되어 있기 때문에 add() , delete() 불가
=> list로 전환 후에 작업해야 함
=> 작업 이후 다시 배열로 전환 필요
더보기
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"),
};
2. Collection 자료구조
2.0 Collection Framework
:: 데이터를 효율적으로 저장하고 관리하기 위한 클래스와 인터페이스의 집합
- 주요 인터페이스
1. List :: 순서 O 데이터 집합, 값의 중복 O
2. Set :: 순서 X 데이터 집합, 값의 중복 X
3. Map :: key와 value 쌍의 집합, 키의 중복 X
2.1 List
- 리스트
:: 순서가 있는 데이터를 저장, 중복 허용
:: 값을 자유롭게 추가/수정/삭제 가능
- 구현체의 종류
1) ArrayList :: 조회 성능 우수
2) LinkedList :: 삽입/삭제 성능 우수
더보기
// 고정 길이 List 선언 (Integer 요소)
List<Integer> integer_array = Arrays.asList(1, 2, 3);
System.out.println("고정 길이 List: " + integer_array); // [1, 2, 3]
// 가변 길이 List 선언 (Integer 요소)
List<Integer> integer_list = new ArrayList<>();
integer_list.add(1); // 추가
integer_list.add(2);
integer_list.add(3);
System.out.println("가변 길이 List 초기화: " + integer_list); // [1, 2, 3]
integer_list.get(2); // 조회 :: 3
integer_list.set(0, 5); // 수정 :: [0]값을 5로 바꿈 ->[5,2,3]
integer_list.remove(0); // 삭제 ::[0]값을 삭 ->[2,3]
integer_list.subList(0, 1); // 부분 리스트 조회 :: [0]~[1-1]까지
integer_list.sort(Integer::compareTo); // 정렬 :: 오름차
integer_list.contains(1); // 포함여부 :: boolean
integer_list.clear(); // 리셋 - 모든 요소 제거 :: []
integer_list.isEmpty(); // 검사 - 비어있는지 :: boolean
integer_list.size(); // 개수 - length
- 1, 2 모두 적용 가능한 메서드
더보기
1) 추가
메서드 | 반환값 | 비교 |
add(E e) | boolean (항상 true 반환) |
리스트 끝에 요소 추가 |
add(int index, E element) | void | 특정 인덱스에 요소 추가 |
addAll(Collection<? extends E> c) | boolean (리스트에 추가된 요소의 개수에 따라 다름) |
다른 컬렉션의 요소들을 리스트에 추가 |
addAll(int index, Collection<? extends E> c) | boolean (리스트에 추가된 요소의 개수에 따라 다름) | 특정 인덱스에 다른 컬렉션의 요소들을 추가 |
2) 조회
메서드 | 반환값 | 비교 |
get(int index) | E (요소) | 지정된 인덱스의 요소 조회 |
3) 수정
메서드 | 반환값 | 비교 |
set(int index, E element) | E (수정된 이전 값 | 지정된 인덱스에 요소 수정 |
4) 삭제
메서드 | 반환값 | 비교 |
remove(int index) | E (삭제된 요소) | 지정된 인덱스의 요소 삭제 |
remove(Object o) | boolean (객체 삭제 여부) | 지정된 객체 삭제 |
removeAll(Collection<?> c) | boolean (리스트가 변경되었는지 여부) | 다른 컬렉션의 요소들을 삭제 |
clear() | void | 리스트의 모든 요소 삭제 |
5) 부가적인 옵션
메서드 | 반환값 | 비교 |
contains(Object o) | boolean (리스트에 객체가 포함되어 있으면 true) | 리스트에 특정 객체가 포함되어 있는지 확인 |
isEmpty() | boolean (리스트가 비어 있으면 true) | 리스트가 비어있는지 확인 |
size() | int (리스트의 요소 개수 | 리스트의 크기(요소 개수) 반환 |
indexOf(Object o) | int (객체가 첫 번째로 나타나는 인덱스, 없으면 -1) | 지정된 객체의 인덱스 반환 |
lastIndexOf(Object o) | int (객체가 마지막으로 나타나는 인덱스, 없으면 -1) | 지정된 객체의 마지막 인덱스 반환 |
subList(int fromIndex, int toIndex) | List<E> (부분 리스트) | 지정된 범위의 서브리스트 반환 ([from]~[to - 1] |
toArray() | Object[] (리스트를 배열로 변환) | 리스트를 배열로 변환 |
sort(Comparator<? super E> c) | void | 리스트를 정렬 |
clone() | Object (리스트 복제된 객체) | 리스트 복제 |
- 2에만 적용 가능한 메서드
:: LinkList의 경우 List + Deque와 Queue의 인터페이스도 구현
:: So, 아래와 같은 추가적인 메서드도 사용 가능
더보기
메서드 | 반환값 | 비교 |
peek() | E (첫 번째 요소, 비어 있으면 null) | 리스트의 첫 번째 요소를 제거하고 반환 |
poll() | E (첫 번째 요소, 비어 있으면 null) | 리스트의 첫 번째 요소를 제거하고 반환 |
push(E e) | void | 리스트의 첫 번째 위치에 요소를 추가 |
pop() | E (제거된 첫 번째 요소) | 리스트의 첫 번째 요소를 제거하고 반환 |
offer(E e) | boolean (항상 true 반환) | 리스트의 끝에 요소를 추가 |
offerFirst(E e) | boolean (항상 true 반환) | 리스트의 첫 번째 위치에 요소를 추가 |
offerLast(E e) | boolean (항상 true 반환) |
리스트의 마지막 위치에 요소를 추가 |
removeFirst() | E (제거된 첫 번째 요소) | 리스트의 첫 번째 요소를 제거 |
removeLast() | E (제거된 마지막 요소) | 리스트의 마지막 요소를 제거 |
- 헷갈리는 Element와 Object
- E - Element (요소)
:: 일반적으로 컬렉션이나 자료 구조에서 요소를 나타내는 타입
:: 단일 요소의 타입을 정의 - O - Object (객체)
:: 자바의 최상위 클래스인 Object 를 의미
:: object 타입이 사용되는 제네릭 클래스나 메서드에서 사용
- E - Element (요소)
2.2 Set
:: 들어있는 값들이 모두 고유한 리스트
:: 순서가 없는 데이터 집합
:: value의 중복 X -> 값 추가 시, 있는 값이면 추가 x
- 구현체의 종류
1) HashSet
2) TreeSet :: 자동 정렬 → 이진 검색트리(Red-Black tree) 사용
더보기
Set<Integer> integer_set = new HashSet<>(Arrays.asList(1, 2, 3));
integer_set.add(4); // 추가, 해당 value가 있다면 추가 x , boolean
integer_set.remove(3); // 삭제 , boolean
integer_set.contains(1); // 포함 boolean
integer_set.clear(); // 리셋 void
integer_set.isEmpty(); // 검사 boolean
integer_set.size(); // 개수 int
2.3 Map
:: key - Value 기반 자료 구조
:: key는 고유 값으로 중복 X
- 구현체의 종류
1) HashMap :: 해쉬의 경우 키의 순서 보장X → 삽입된 순서와는 관계없이 내부적으로 해시값에 의해 정렬
2) TreeMap :: 자동 정렬
3) LinkedHashMap :: 키 순서 보장하는 해쉬
=> DB와 유사(primary key - row/data)
- Entry : entrySet()
- Key : keySet(), containsKey()
- Value : values(), containsValue()
더보기
Map<Integer, Integer> integer_map = new HashMap<>(); // 빈 Map 선언 (Integer 요소)
// put(K key, V value) // k-v 쌍 추가
integer_map.put(1, 1);
integer_map.put(2, 2);
integer_map.put(3, 3);
//get(Object key), // 조회- 있다면 해당 값, 없으면 null
integer_map.get(3);
// replace(K key, V value) // 수정 k 값의 v를 새로운 v로 수정 // 이전 값 or null
integer_map.replace(4, 5);
// remove(Object key) 삭제된 값 or null
integer_map.remove(3); // 삭제
// containsKey(Object key) T/F
integer_map.containsKey(1); // 포함
// containsValue(Object value) T/F
integer_map.containsValue(1); // 포함
// entrySet() key: value, ... 반환(Map.Entry)
integer_map.entrySet(); // - Entry = [Key, Value] (Set)
// keySet() [key1 , key2 ... ]/set
integer_map.keySet(); // - Key (Set)
// values() List 또는 Collection 타입으로 모든 value
integer_map.values(); // - Value (List)
// clear() void
integer_map.clear(); // 리셋
// isEmpty() T/F
integer_map.isEmpty(); // 검사
// size() int
integer_map.size(); // 개수
참조
ASAC 수업자료