반응형
Collections는 클래스로 Collection 인터페이스와 다릅니다.
Collections 클래스 안의 메서드들은 static이기 때문에 인스턴스를 생성하지 않고 바로 사용 가능합니다.
Collections 클래스는 Collection 인터페이스로 구현한 클래스들에 대한 객체생성, 정렬(sort), 병합(merge), 검색(serch) 등의 기능을 수행하도록 도와주는 클래스입니다.
Collection 인터페이스로 구현한 클래스에 대한 설명은 아래 포스팅을 통해 알 수 있습니다.
import java.util.Collections;
Collections 메서드
메서드 | 설 명 |
max(Collection c) | 지정된 컬렉션에서 최대 요소를 반환. |
min(Collection c) | 지정된 컬렉션에서 최소 요소를 반환. |
sort(Collection c) | 지정된 컬렉션을 정렬시킨다. 기본적으로 오름차순으로 정렬 |
shuffle(Collection c) | 지정된 컬렉션의 요소들의 순서를 무작위로 섞는다. |
binarySearch(Collection c) | 지정된 컬렉션에서 이진 탐색 알고리즘을 사용해 지정된 객체를 검색해 인덱스를 반환 |
disjoint(Collection c) | 2개의 지정된 컬렉션들에서 공통된 요소가 하나도 없는 경우 true 를 반환 |
reverse(Collection c) | 지정된 컬렉션에 있는 순서를 역으로 변경 |
주로 사용하는 메서드 설명
sort()
주어진 Collection을 오름차순으로 정렬합니다.
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class CollectionsEx {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("C");
list.add("B");
list.add("A");
System.out.println("정렬 전 : " + list);
Collections.sort(list);
System.out.println("정렬 후 : " + list);
}
}
Shuffle()
주어진 Collection에 존재하는 요소의 순서들을 랜덤하게 섞습니다.
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class CollectionsEx {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("C");
list.add("B");
list.add("2");
list.add("A");
list.add("3");
list.add("F");
list.add("D");
System.out.println("섞기 전 : " + list);
Collections.shuffle(list);
System.out.println("석기 후 : " + list);
}
}
binarySearch()
주어진 Collection에서 찾고자 하는 값의 index를 반환합니다.
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class CollectionsEx {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("0");
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
System.out.println(list);
System.out.println("3의 위치는 : " + Collections.binarySearch(list, "3"));
System.out.println("5의 위치는 : " + Collections.binarySearch(list, "5"));
}
}
reverse()
주어진 Collection의 순서를 반대로 반환합니다.
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class CollectionsEx {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
System.out.println("reverse 전 : " + list);
Collections.reverse(list);
System.out.println("reverse 후 : " + list);
}
}
disjoint()
주어진 Collection 2개의 Collection들에서 공통된 요소가 하나도 없는 경우 true 를 반환합니다.
하나라도 같은 요소가 있다면 false를 반환합니다.
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
public class CollectionsEx {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Dog");
list.add("Cat");
list.add("Cow");
list.add("Tiger");
System.out.println(list);
List<String> list2 = new ArrayList<>(list.size());
list2.add("A");
list2.add("B");
list2.add("C");
list2.add("D");
System.out.println(list2);
System.out.println(Collections.disjoint(list, list2));
}
}
Collections 클래스 메서드 예제
import java.util.List;
import java.util.ArrayList;
import static java.util.Collections.*; // Collections를 생략가능
public class CollectionsEx1 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
System.out.println("list = " + list);
addAll(list, 1,2,3,4,5,9);
System.out.println("addAll(list, 1,2,3,4,5,9) = " + list);
rotate(list, 3); // 오른쪽으로 3칸씩 이동
System.out.println("rotate(list, 3) = " + list);
swap(list, 0, 2); // index 0과 3을 교환
System.out.println("swap(list, 0, 2) = " + list);
shuffle(list); // 저장된 요소들의 위치를 임의로 썩는다.
System.out.println("shuffle(list) = " + list);
sort(list); // 오른차순 정렬
System.out.println("sort(list) = " + list);
sort(list, reverseOrder()); // 내림차순 (역순) 정렬
System.out.println("sort(list, reverseOrder()) = " + list);
sort(list); // binarySearch()를 사용하기 전에는 반드시 정렬이 필요하다. (정렬안하면 이상한 값 출력됨)
System.out.println("binarySearch(list, 5) = " + binarySearch(list, 5)); // 5가 저장된 위치 index를 반환
System.out.println("max(list) = " + max(list)); // 요소중 최대값 반환
System.out.println("min(list) = " + min(list));// 요소중 최소값 반환
fill(list, 10); // 주어진 값으로 리스트를 채운다.
System.out.println("fill(list, 10) = " + list);
// list와 같은 크리의 새로운 list2를 생성하고 2를 채운다.
List<Integer> list2= nCopies(list.size(), 2);
System.out.println("list2 = " + list2);
System.out.println("공통요소 확인 = " + disjoint(list, list2)); // 공통요소가 없다면 true
copy(list, list2); // list의 값들을 list2의 값으로 복사한다.
System.out.println("list = " + list);
System.out.println("list2 = " + list2);
System.out.println("공통요소 확인 = " + disjoint(list, list2)); // 공통요소가 있다면 false
}
}
ArrayList 정렬하기 (오름차순, 내림차순)
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class CollectionsEx {
public static void main(String[] args) {
List<String> list = new ArrayList<>(Arrays.asList("C", "B", "A", "a", "F"));
System.out.println("list : " + list);
// 오름차순으로 정렬
Collections.sort(list);
System.out.println("list 오름차순 : " + list);
// 내림차순으로 정렬
Collections.sort(list, Collections.reverseOrder());
System.out.println("list 내림차순 : " + list);
// 대소문자 구분없이 오름차순
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
System.out.println("list 대소문자 구분없이 오름차순 : " + list);
// 대소문자 구분없이 내림차순
Collections.sort(list, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));
System.out.println("list 대소문자 구분없이 내림차순 : " + list);
}
}
오름차순 정렬 시 소문자 a는 유니코드상 대문자보다 값이 더 크기 떄문에 마지막에 배치되었습니다.
String.CASE_INSENSITIVE_ORDER이 Comparator는 대소문자 구분없이 정렬할수 있게 해줍니다.
대소문자 구분없이 오름차순시, 소문자 a는 A와 같은 순위로 취급되어 원래의 순서를 유지합니다.
참고자료
자바의 정석3
https://velog.io/@gillog/Collections-%ED%81%B4%EB%9E%98%EC%8A%A4
'◼ JAVA' 카테고리의 다른 글
[Java/자바] HashSet 클래스 사용법 (2) | 2022.10.31 |
---|---|
[Java/자바] Comparator와 Comparable (1) | 2022.10.31 |
[Java/자바] Iterator, Listlterator 클래스 사용법 (0) | 2022.10.30 |
[Java/자바] LinkedList 클래스 사용법 (0) | 2022.10.30 |
[Java/자바] ArrayList 클래스 사용법 (0) | 2022.10.30 |