이 글은 유튜브 '자바의 정석 - 기초편'을 보고 정리한 글입니다.
📂content
1. Collections
⚝ 컬렉션 채우기, 복사, 정렬, 검색
- fill(), copy(), sort(), binarySearch() 등
⚝ 컬렉션의 동기화 - synchronizedXXX()
- vector와 ArrayList 모두 배열 기반 컬렉션이다. 이 둘의 차이는 동기화(13장.쓰레드)였다.
과거에는 무조건 동기화가 되어있었다. 그런데 동기화가 필요하지 않을 때는 불필요한 기능이 되어서 ArrayList에서는 메서드로 빼서 필요할 때만 사용하도록 했다.
- 사용법
List syncList = Collections.synchronizedList(new ArrayList(...));
동기화되지 않은 리스트를 넣으면 동기화된 리스트를 가질 수 있다. 이것은 Vector와 같다.
⚝ 변경불가 (readOnly) 컬렉션 만들기 - unmodifiableXXX()
변수에 final을 붙이면 상수가 되어 변경불가한 것처럼 된다.
⚝ 싱글톤 컬렉션 만들기 - singletonXXX()
객체를 한 개만 저장한다.
⚝ 한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()
List list = new ArrayList();
List checkedList = checkedList(list, String.class); //String만 저장가능
checkedList.add("abc"); //OK
checkedList.add(new Integer(3)); //에러. ClassCastException발생
12장 지네릭스가 한 가지 객체만 저장하게 해준다. 그런데 지네릭스가 JDK 1.5부터 나와서, 이전 버전 클래스들은 필요할 때, checked로 시작하는 메서드를 사용한다. 그냥 이런게 있다~로 알고 있기
⍟실습
더보기
package etc;
import java.util.*;
import static java.util.Collections.*; //static import를 하면서 Collections를 생략가능하게 해줌
public class Ex11_19 {
public static void main(String[] args) {
List list = new ArrayList();
System.out.println(list); //[]
addAll(list, 1,2,3,4,5);
System.out.println(list); //[1, 2, 3, 4, 5]
rotate(list, 2); // 반시계방향으로 두 번 회전
System.out.println(list); //[4, 5, 1, 2, 3]
swap(list, 0, 2); // 첫 번째와 세 번째를 교환(swap)
System.out.println(list); //[1, 5, 4, 2, 3]
shuffle(list); // 저장된 요소의 위치를 임의로 변경
System.out.println(list); //[5, 1, 4, 3, 2]
sort(list, reverseOrder()); // 역순 정렬 reverse(list);와 동일
System.out.println(list); //[5, 4, 3, 2, 1]
sort(list); // 정렬
System.out.println(list); //[1, 2, 3, 4, 5]
int idx = binarySearch(list, 3); // 3이 저장된 위치(index)를 반환
System.out.println("index of 3 = " + idx); //index of 3 = 2
System.out.println("max="+max(list)); //max=5
System.out.println("min="+min(list)); //min=1
System.out.println("min="+max(list, reverseOrder())); //min=1
fill(list, 9); // list를 9로 채운다.
System.out.println("list="+list); //list=[9, 9, 9, 9, 9]
// list와 같은 크기의 새로운 list를 생성하고 2로 채운다. 단, 결과는 변경불가
List newList = nCopies(list.size(), 2);
System.out.println("newList="+newList); //newList=[2, 2, 2, 2, 2]
System.out.println(disjoint(list, newList)); // 공통요소가 없으면 true
copy(list, newList);
System.out.println("newList="+newList); //newList=[2, 2, 2, 2, 2]
System.out.println("list="+list); //list=[2, 2, 2, 2, 2]
replaceAll(list, 2, 1);
System.out.println("list="+list); //list=[1, 1, 1, 1, 1]
Enumeration e = enumeration(list);
ArrayList list2 = list(e);
System.out.println("list2="+list2); //list2=[1, 1, 1, 1, 1]
}
}
2. 컬렉션 클래스 정리 & 요약
컬렉션 | 특징 |
ArrayList | 배열기반, 데이터의 추가와 삭제에 불리, 순차적인 추가/삭제는 제일 빠름. 임의의 요소에 대한 접근성(accessibility)이 뛰어남. |
LinkedList | 연결기반. 데이터의 추가와 삭제에 유리. 임의의 요소에 대한 접근성이 좋지 않다. |
HashMap | 배열과 연결이 결합된 형태. 추가, 삭제, 검색, 접근성이 모두 뛰어남. 검색에는 최고성능을 보인다. |
TreeMap | 연결기반. 정렬과 검색(특히 범위검색)에 적합. 검색성능은 HashMap보다 떨어짐 |
Stack | Vector을 상속받아 구현(LIFO) |
Queue | LinkedList가 Queue인터페이스를 구현(FIFO) |
Properties | Hashtable을 상속받아 구현(String, String) 파일의 읽기/쓰기가 용이 |
HashSet | HashMap(Key이용)을 이용해서 구현 |
TreeSet | TreeMap(Key이용)을 이용해서 구현 |
LinkedHashMap LinkedHashSet |
HashMap과 HashSet에 저장순서유지기능을 추가함 |
출처
'🎥Back > 자바의 정석' 카테고리의 다른 글
[JAVA의 정석]와일드카드, 제네릭 메서드 (0) | 2024.01.19 |
---|---|
[JAVA의 정석]Generics, Generics 클래스 (0) | 2024.01.18 |
[JAVA의 정석]HashMap (0) | 2024.01.17 |
[JAVA의 정석]TreeSet (0) | 2024.01.17 |
[JAVA의 정석]HashSet (0) | 2024.01.17 |