본문 바로가기
JAVA BASE/Collection(컬렉션) - 자료구조

17. [자바] Collections - 메소드

by staticClass 2021. 1. 6.

다른 컬렉션, 자료구조에 대해 궁금하다면 아래의 링크로 들어오시라👍

 

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

컬렉션 프레임워크란? 다수의 데이터를 다루는 데 필요한 배열과 비슷하지만 더 성능이 뛰어난 많은 클래스들을 제공한다 크게 3가지 그룹이 있는데 List, Set, Map이다. 계층도와 같이 Map인터페이

staticclass.tistory.com

Collections ?

Collections는 컬렉션과 관련되 메소드를 제공하는데

이를 이용하면 컬렉션클래스를 보다 편하게 사용할 수 있다.

 

메소드 설 명
void fill(List list, Object obj); List(list)를 객체(obj)로 채운다
void copy(destination dest, Source src); 목적지(dest)의 컬렉션을 source(src)의 데이터로 복사한다.
dest의 size가 src의 size보다 크거나 같아야 복사가 된다.
void sort(List list); List(list)를 오름 차순으로 정렬한다.
void sort(List list, Comparator c); List(list)를 Comparator의 정렬 기준으로 정렬한다.
int binarySearch(List list, Key key) List에서 key가 저장된 위치를 찾아 반환한다.
반드시 sort()로 정렬한 후에 실행해야 올바른 값이 나온다.
Collection synchronizedCollection(Collection c) 컬렉션 동기화
멀티 쓰레드 프로그래밍 시 하나의 객체에 여러 쓰레드가
동시에 접근할 수 있기 때문에 데이터의 일관성을 
유지하기 위해 공유되는 객체에 동기화(synchronized)가
필요하다
동기화가 필요 할 때 해당하는 것을 사용하면 된다.
List synchronizedList(List list)
Set synchronizedSet(Set s)
Map synchronizedMap(Map m)
SortedSet synchronizedSortedSet(SortedSet s)
SortedMap synchronizedSortedMap(SortedMap m)
Collection unmodifiableCollection(Collection c) 변경불가 컬렉션 만들기
저장된 데이터를 보호하기 위해 컬렉변을 변경할 수 없게
읽기전용으로 만들어야할 때가 있다.
주로 멀티 쓰레드 프로그래밍에서 여러 쓰레드가
하나의 컬렉션을 공유하다보면 데이터 손상이 생기는데
이를 방지하기 위한 메서드이다.
List unmodifiableList(List list)
Set unmodifiableSet(Set set)
Map unmodifiableMap(Map map)
NavigableSet unmodifiableNavigableSet(NavigableSet set)
SortedSet unmodifiableSortedSet(SortedSet set)
NavigableMap unmodifiableNavigableMap(NavigableMap map)
SortedMap unmodifiableSortedMap(SortedMap map)
List singletonList(Object o) 싱글톤 컬렉션
단 하나만의 객체를 저장하는 컬렉션을 만들 수 있다.
매개변수로 저장할 요소를 지정하면 해당 요소를 반환하는
컬렉션을 반환한다.
반환한 컬렉션은 변경할 수 없다.
Set singleton(Object o)
Map singletonMap(Object key, Object value)
Collection checkedCollection(Collection c, Class type) 한 종류의 객체만 저장하는 컬렉션 만들기
컬렉션에 지정된 종류의 객체만 저장할 수 있도록
제한할 수 있다.


제네릭스로 간단히 처리할 수 있지만
호환성 때문에 제공되는 메서드이다.
List checkedList(List list, Class type)
Set checkedSet(Set s, Class type)
Map checkedMap(Map m, Class keyType, Class valueType)
Queue checkedQueue(Queue q, Class type)
NavigableSet checkedNavigableSet (NavigableSet s,
Class type)
SortedSet checkedSortedSet(SortedSet s, Class type)
NavigableMap checkedNavigableMap(NavigableMap m,
Class keyType, Class valueType)
SortedMap checkedSortedMap(SortedMap m, 
Class keyType, Class valueType)
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

public class Main {
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		List list = new ArrayList();
		System.out.println(list);
		
		Collections.addAll(list, 1,2,3,4,5);
		
		
		Collections.rotate(list, 2);	//오른쪽으로 두 칸씩 이동
		System.out.println(list); // [4, 5, 1, 2, 3]
		
		
		Collections.swap(list, 0, 2);	//첫 번째와 세 번재를 교환(swap)
		System.out.println(list); // [1, 5, 4, 2, 3]
		
		
		Collections.shuffle(list);	// 저장된 요소의 위치를 임의로 변경
		System.out.println(list);	// 무작위
		
		
		Collections.sort(list);	// 정렬
		System.out.println(list); // [1, 2, 3, 4, 5]
		
		
		Collections.sort(list,Collections.reverseOrder()); // 역순 정렬
		System.out.println(list); // [5, 4, 3, 2, 1]
		
		
		int idx = Collections.binarySearch(list, 3); // 3이 저장된 위치(index)를 반환
		System.out.println(idx); // 2
		
		
		System.out.println("max = " + Collections.max(list));	// max = 5
		System.out.println("min = " + Collections.min(list));	// min = 1
		System.out.println("min = " + Collections.max(list, Collections.reverseOrder()));	// min = 1
		
		
		Collections.fill(list, 9); // list를 9로 채운다
		System.out.println(list); // [9, 9, 9, 9, 9]
		
		
		//list와 같은 크기의 새로운 list를 생성하고 2로 채운다. 단, 결과는 변경불가
		List newList = Collections.nCopies(list.size(), 2);
		System.out.println(newList); // [2, 2, 2, 2, 2]
		
		
		System.out.println(Collections.disjoint(list, newList)); // 공통요소가 없으면 true
		
		
		Collections.copy(list, newList);
		System.out.println(newList);	// [2, 2, 2, 2, 2]
		System.out.println(list);		// [2, 2, 2, 2, 2]
		
		
		Collections.replaceAll(list, 2, 1); // 모든 객체를 찾아 2와 같으면 1로 변경한다
		System.out.println(list);  // [1, 1, 1, 1, 1]
		
		
		Enumeration e = Collections.enumeration(list);	// 리스트를 Enumeration로 변환한다
		
		
		ArrayList list2 = Collections.list(e);	// Enumeration를 리스트로 변환한다.
		
		
		System.out.println(list2); // [1, 1, 1, 1, 1]
		
	}
	
}

댓글