[Java/자바] Collections 클래스

Collections는 클래스로 Collection 인터페이스와 다릅니다.

Collections 클래스 안의 메서드들은 static이기 때문에 인스턴스를 생성하지 않고 바로 사용 가능합니다.

 

Collections 클래스는 Collection 인터페이스로 구현한 클래스들에 대한 객체생성, 정렬(sort), 병합(merge), 검색(serch) 등의 기능을 수행하도록 도와주는 클래스입니다.

 

Collection 인터페이스로 구현한 클래스에 대한 설명은 아래 포스팅을 통해 알 수 있습니다.

 

[Java/자바] 컬렉션 프레임워크(Collections Framework)

컬렉션 프레임워크란 "다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미" 합니다. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고

hstory0208.tistory.com

 

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