Arrays
배열을 다루는데 유용한 메서드가 정의되어있다
Arrays에 정의된 메서드는 전부 static 메서드이다
배열의 복사 - copyOf(), copyOfRange()
새로운 배열 생성/반환
배열 채우기 - fill(), setAll();
fill()은 배열의 모든 요소를 지정된 값으로 채운다
setAll()은 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다
배열의 정렬과 검색 - sort(), binarySearch(){이진탐색}
sort()는 배열을 정렬할 때 사용된다
binarySearch()는 배열에 저장된 요소를 검색할 때 사용된다, 배열이 정렬된 상태여야 결과를 얻는다
배열의 비교와 출력 - equals(), toString()
toString()은 배열의 모든 요소를 문자열로 편하게 출력할 수 있다
다차원 배열에서는 deepToString()을 사용해야한다
equals() 두 배열에 저장된 모든 요소를 비교해서 같으면 true 다르면 false 반환
다차원 배열을 비교할 때 deepToEquals()를 사용한다
배열을 List로 변환
asList()는 배열을 List에 담아서 반환한다
parallelXXX(), spliterator(), stream()
보다 빠른 결과를 얻기 위해 여러 쓰레드가 작업을 나누어 처리하도록 한다
Comparator와 Comparable
Compatator 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용한다
Comparable 기본 정렬기준을 구현하는데 사용한다
객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스이다
**정렬할 때는 정렬 대상과 기준이 필요하다
compare()과 compareTo()는 두 객체의 비교결과를 반환하도록 작성된다
같으면 0, 오른쪽이 크면 음수, 작으면 양수이다
HashSet
저장 순서를 유지하지 않고, 중복을 허용하지 않는다
Set인터페이스를 구현한 대표적인 컬렉션 클래스이다
순서를 유지하려면, LinkedHashSet 클래스를 사용해야한다
HashSet은 객체를 저장하기전에 기존에 같은 객체가 있는지 확인하고,
같은 객체가 없으면 저장, 있으면 저장하지 않는다
equals()와 hashCode()가 오버라이딩 되어있어야 한다
TreeSet
각 요소(node)가 나무(tree)형태로 연결(LinkedList의 변형)되어있다
이진 탐색 트리(binary search tree)로 구현하여 범위 탐색과 정렬에 유리하다
이진 트리는 모든 노드가 최대 2개의 하위 노드를 갖는다
*순차검색과 이진검색
순차검색 : 순서대로 찾는다
이진검색 : 10개 요소가 있으면 반을 잘라서 검색 (sort로 정렬되어 있어야 한다)
**이진 탐색(검색) 트리 (binary search tree)
부모보다 작은 값은 왼쪽, 큰 값은 오른쪽에 저장
데이터가 많아질수록 추가, 삭제에 시간이 더 걸림(비교 횟수 증가)
검색과 정렬에 유리하지만 중복된 값 저장 불가
tailSet : TreeSet에 저장된 객체 중 지정된 기준 값보다 큰 값의 객체들을 얻을 수 있다
headSet : 지정된 기준 값보다 작은 값의 객체들을 얻을 수 있다
트리 순회(tree traversal)
이진 트리의 모든 노드를 한번씩 읽는 것을 트리 순회라고 한다
전위, 중위, 후위 순회법이 있으며, 중위 순회를하면 오름차순으로 정렬된다
HashMap과 Hashtable
Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장한다
HashMap(동기화x)은 Hashtable(동기화o)의 신버전이다
**키 : 컬렉션 내의 키 중에서 유일해야 한다
값 : 키와 달리 데이터의 중복을 허용한다**
HashMap
Map인터페이스를 구현한 대표적인 컬렉션 클래스
순서를 유지하려면 LinkesHashMap클래스를 사용한다
TreeMap
범위 검색과 정렬에 유리한 컬렉션 클래스이다
HashMap보다 데이터 추가, 삭제에 시간이 더 걸린다
Properties
HashMap의 구 버전인 Hashtable을 상속받아 구현한 것이다
(String, String)의 형태로 저장하는 단순화된 컬렉션 클래스이다
간단한 입출력에 사용된다
해싱과 해시함수
해싱 : 해시함수를 이용해서 데이터를 해시테이블에 저장하고 검색하는 기법을 말한다
해싱을 구현한 컬렉션 클래스로는 HashSet, HashMap, Hashtable 등이 있다
사용하는 자료구조는 배열과 링크드 리스트가 조합된 형태이다
HashMap에 저장된 데이터를 찾는 과정
1. 검색하고자 하는 값의 키로 해시함수를 호출한다
2. 해시함수의 계산결과(해시코드)로 해당 값이 저장되어 있는 링크드 리스트를 찾는다
3. 링크드 리스트에서 검색한 키와 일치하는 데이터를 찾는다
링크드리스트는 검색에 불리한 자료구조이기 때문에 용량이 커질수록 검색속도가 떨어진다
배열은 크기가 커져도 원하는 요소가 몇 번째에 있는지만 알면,
배열의 인덱스가 n인 요소의 주소 = 배열의 시작주소 + type의 size*n
해당 공식으로 빠르게 찾을 수 있다