자바의 정석 11장 (30일차) - Collections 클래스

728x90

Collections

Collection 클래스를 위한 static 메서드를 제공한다. Math클래스와 동일한 방식으로 사용할 수 있다.

  • Math.random, Math.abs 등

1. fill, copy, binearysearch, sort등 Arrays메서드와 동일한 메서드 보유

2. 동기화 전용 메서드를 보유 - synchronized

Vector는 동기화가 되어있지만 ArrayList는 동기화를 안하게 되어있다. 필요할 때만 동기화된 클래스를 사용

  • 기능적으로 효율적인 코드

 

아래의 형식처럼 Collections.synchronized로 동기화를 ArrayList에 적용하면 Vector클래스를 사용하는 것과 동일하다.

		List list = new ArrayList();
		Collections.synchronizedCollection(list);

 

3. 변경불가 Colleciton - unmodifiable

unmodifiable로 시작하며 Collection을 수정하지 못하게 한다.

  • 읽기전용, final 상수와 동일한 의미

4. 싱글톤 클래스 - singleton

Collection에 객체 데이터를 1개만 보관 가능하게 만드는 기능이다.

 

 

5. 한가지 타입의 변수만 저장 가능 - checked

Collection에는 저장 변수의 타입이 Object이기 때문에 모든 변수의 종류를 보관가능하지만, checked를 사용하여 변수 타입을 지정해 주면 그 종류의 변수만 저장이 가능하다.

 

 

아래의 예시처럼 CheckedList라는 새로운 리스트를 Collections.checkedList를 사용하여 만들어서 String.class만 사용 가능하도록 기준을 만든다. 

기준이 String 클래스이므로 다른 타입을 add하면 cast오류가 발생된다.

		List list = new ArrayList();
		List checkedList = Collections.checkedList(list, String.class);
//		Collection 클래스를 지정하고 기본형 클래스를 선언하는데
//		기본형 클래스에 .class를 붙여서 선언해야한다
//		checkedList.add(new Integer(123));
		checkedList.add(new String("ss"));
//		checkedList.add(123); // 오류 발생, Integer 클래스 add 불가
		System.out.println(checkedList);

Collections 메서드

  • addAll(Collection c, 넣을 배열) - 넣을 배열 넣기
  • rotate(Collection c, 오른쪽으로 지정한 숫자만큼 이동) - 오른쪽으로 배열을 이동 후 마지막 변수는 처음으로 이동
  • shuffle(Collection c) - 넣은 배열 섞기
  • swap(Collection c, int n, int n2) - n에서 n2로 변수 이동
  • sort(Collection c) - 변수 오름차순 정렬
  • sort(Collection c, reversedOrder()) - 변수 내림차순 정렬
  • binearySearch(Collection c, var v) - 지정 변수의 인덱스를 반환 
  • max(Collection c) - 최대값 반환
  • min(Collection c) - 최소값 반환
  • fill(Collection c, var v) - 지정 변수로 배열 채워넣음
  • nCopies(Collection c var v) - 배열에 var v을 채워넣음
  • disjoint(Collection c, Collection c2) - 두 배열간 겹치는 값이 없으면 true, 있으면 false
  • copy(Collection c, Collection c2) - 배열 c에 배열 c2값을 복사
  • replaceAll(Collection c, Object obj, Object obj2) - 배열 c안에서 obj의 값을 obj2의 값으로 전부 대체

 

 

 

728x90