collection vs Collection vs Collections
collection)
데이터나 집합이나 그룹, 객체가 저장되고 반복되는 자료구조
Collection
인터페이스
(java.util.Collection 프레임워크)
- Collection '프레임워크' 내에 있는 Collection '인터페이스'
- 여러 요소들을 담기 위해 만들어졌기 때문에, Container 객체라고도 불림
- Set, List, Queue 인터페이스가 하위 인터페이스로서 있음
- ex) ArrayList : Collection 인터페이스 → List 인터페이스 → ArrayList 클래스로 구현을 하는 것
Collections
utility 클래스 (java.util.Collections 클래스)
Collection
인터페이스이며, Iterable을 상속받는다
Itebrale이란
JFC에서 봤던 구조 그림을 떠올리면 된다. Collection 인터페이스의 상위에 있던 인터페이스이다.
Collections
Object를 상속받는 클래스이다
Collection vs Collections
위의 그림을 보면 두 가지 이름이 가리키는 대상이 확실히 다름을 알 수 있다. 이에 조금 보충설명을 하면 다음과 같다.
- Collection(인터페이스) : Set, List, Queue 등의 인터페이스의 상위(부모) 인터페이스
- Collections(클래스) : Collection을 이용하기 위한 클래스
- Collection과 관련된 메소드들을 모아놓은 클래스
이렇게 Collection 인터페이스와 연관하여 Collections라는 클래스가 하는 역할에 대해 알았으니, Collections의 구체적인 기능들에 대해 알아보자.
Collections 클래스
- Collection 인터페이스를 구현한 클래스에 대한 객체 생성, 정렬, 병합, 검색 등의 기능을 안정적으로 수행하도록 도와주는 utility 클래스이다.
- Generic 기술을 사용하여 작성되었으며, 정적 메소드의 형태로 되어있다.
자주 사용되는 알고리즘
- 정렬 (Sortiing)
- 섞기 (Shuffling)
- 탐색 (Searching)
주요 method
- max : 지정된 컬렉션에서 최대 요소를 반환
- min : 지정된 컬렉션에서 최대 요소를 반환
- sort : 지정된 컬렉션 정렬
- shuffle : 지정된 컬렉션의 요소들의 순서를 무작위로 섞기
- synchronizedCollection : 지정된 컬렉션에 의해 지원되는 동기화 된 컬렉션을 재생성해 반환
- binarySearch : 지정된 컬렉션에서 이진 탐색 알고리즘을 사용해 지정된 객체를 검색해 인덱스를 반환
- disjoint : 2개의 지정된 컬렉션들에서 공통된 요소가 하나도 없는 경우 true 를 반환
- copy : 지정된 컬렉션의 모든 요소를 새로운 컬렉션으로 복사해 반환
- reverse : 지정된 컬렉션에 있는 순서를 역으로 변경
Collections.max() / min()
리스트가 비어있을 경우 NoSuchElementException이 발생함. 리스트가 비어있을 경우에 대한 기본값 처리 필수
List<Integer> numbers = List.of(4, 0, 5, 2, 7, 1, 8, 6, 9, 3);
int max = numbers.isEmpty() ? -1 : Collections.max(numbers);
System.out.println("Max: " + max); // Max: 9
Collections.sort()
- 정적(static) 메소드
- List 인터페이스를 구현하는 컬렉션에 대하여 정렬을 수행함
- 속도가 비교적 빠르고, 안정성이 보장되는 합병 정렬 (Merge sort) 이용
안정성이란?
동일한 값을 가지는 원소를 다시 정렬하지 않는 성질
같은 리스트를 반복하여 다른 기준에 따라 정렬할 때 중요하다.
ex) 상품 주문 리스트를 날짜를 기준으로 먼저 정렬하고 이후 주문처를 기준으로 정렬
즉, 한번 정렬된 것이 유지됨 = 안정성 있는 정렬
- 정렬은 Comparable 인터페이스를 이용하여 이루어짐
- List 인터페이스 : Comparable 인터페이스를 상속 → Collections.sort() 이용 가능
Collections.shuffle()
- 리스트에 존재하는 정렬을 파괴
- 정렬과는 반대 동작 수행
Collections.binarySearch()
- 정렬된 리스트에서 지정된 원소를 이진탐색함 ('정렬된 리스트'에 한해서만 탐색을 진행한다는 점)
- 반환값 = 양수이면 찾고자 하는 원소의 인덱스 값을 출력
- 반환값 = 음수 : 탐색이 실패하여 원소를 찾지 못했음을 의미, 그러나 현재 데이터가 삽입될 수 있는 위치 정보를 알려줌, 해당 데이터를 삽입할 수 있는 위치 : (반환값 -1)
Collections.reverse()
리스트의 원소들을 역순으로 바꿈
내림차순 정렬이 아니라 현재 순서를 거꾸로 뒤집는 것.
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] Comparable과 Comparator : 비교를 위한 인터페이스 (0) | 2024.10.22 |
---|---|
[Java] Generic 제네릭 (0) | 2024.10.22 |
[Java] BigDecimal (0) | 2024.09.04 |
[Java] long float의 값 뒤에 L, F을 붙여야 하는 이유 (0) | 2024.09.04 |
[Java] 자료형 정리 (0) | 2024.09.04 |