1. hashCode 메소드의 다양한 정의
.1) 클래스를 정의할 때마다 hashCode 메소드를 정의하기보다는 자바에서는 제공하는
...메소드를 활용한다.
public static int hash(Object...values)
☞ 위 메소드의 매개변수 선언에는 ‘가변인자 선언’이 포함되어 있는데, 이는 전달되는 인자의
...수를 메소드 호출 시마다 달리할 수 있는 선언이다.
※ 메소드 활용 예시
@Override
public int hashCode() { return Objects.hash(model,color);
☞ 전달인자 model, color 기반 해쉬 값 반환
TresSet<E> 클래스의 이해와 활용
.1) TreeSet<E> 클래스는 ‘트리(Tree)’라는 자료구조를 기반으로 인스턴스를 저장한다.
.2) 이는 정렬된 상태가 유지되면서 인스턴스가 저장됨을 의미한다.
.3) 인스턴스들의 참조순서는 오름차순을 기준으로 한다.
※ TreeSet<E>의 정렬기준 예시
인스턴스의 비교 기준을 정의하는 Comparable<T> 인터페이스의 구현 기준
.1) Comparable<T> 인터페이스를 구현할 때 정의해야 할 추상 메소드가 있다.
☞ int compare To(T o)
..☞ 인자로 전달된 o가 작다면 양의 정수 반환
..☞ 인자로 전달된 o가 크다면 음의 정수 반환
..☞ 인자로 전달된 o와 같다면 0을 반환한다.
※ 예를 들어서 my.compareTo(your); 로 메소드가 호출되었을 때 인스턴스 your가 my보다
..작다면 양의 정수를, 반대로 your가 my보다 크다면 음의정수를 반환하도록 메소드를
..구현해야 한다.
※ 나이가 적으면 작은 것이고 나이가 많으면 큰 것으로 compareTo 예시
Comparator<T> 인터페이스를 기바능로 TreeSet<E>의 정렬기준 제시하기
.1) 일시적인 기준 변경으로 compareTo 메소드를 수정하는 일은 적절치 않다.
.2) 이러한 상황을 고려하여 다음 인터페이스를 사용하자.
☞ public interface Comparator<T>
..☞ int compare(T o1, To2)의 구현을 통해 정렬 기준을 결정할 수 있다.
....☞ o1이 o2보다 크면 양의 정수 반환
....☞ o1이 o2보다 작으면 음의 정수 반환
....☞ o1과 o2가 같다면 0 반환
,3) String 클래스의 경우 사전편찬 순으로 정렬이 되도록 이미 Comparable<String>
....인터페이스를 구현하고 있다.
.4) ‘문자열의 길이 순’으로 수정하고 싶다면 다음과 같이 코드를 작성하면 된다.
public int compare(String s1, String s2)
{ return s1.length() - s2.length();}
중복된 인스턴스 삭제하기
.1) List<E> 를 구현하는 컬렉션 클래스는 인스턴스의 중복 삽입을 혀용한다.
.2) 그러므로 HashSet<String> 참조변수 = new HashSet<>(중복삭제할 변수); 를 활용하자.
※ 인스턴스 중복 삭제 예시
Queue<E> 인터페이스를 구현하는 컬렉션 클래스들
.1) 스택(Stack) 과 큐(Queue)의 이해
..(1) 스택은 ‘가장 먼저 저장된 데이터’가 가장 마지막에 빠져나오는 자료구조이다.
...☞ LIFO(last-in-first-out)
..(2) 큐는 들어간 순으로 빠져나오는 자료구조이다.
...☞ FIFO(first-in-first-out)
.2) Queue<E> 인터페이스와 큐(Queue)의 구현
..(1) Queue<E> 인터페이스 대표 3가지 메소드
...boolean add(E e) : 넣기
...E remove() : 꺼내기
...E element() : 확인하기
☞ remove는 인스턴스의 참조 값을 반환하면서 해당 인스턴스를 저장소에서 삭제한다.
☞ element는 인스턴스의 참조 값을 반환하지만 삭제하지 않는다.(확인 메소드)
☞ 위 메소드들은 꺼낼 인스턴스가 없거나 저장공간이 부조갛면 예외를 발생시킨다.
...boolean offer(E e) 넣기, 넣을 공간이 부족하면 false 반환
...E poll() : 꺼내기, 꺼낼 대상 없으면 null 반환
...E peek() : 확인하기, 확인할 대상이 없으면 null 반환
☞ 일반적으로 이 3가지 메소드(offer, poll, peek)를 사용한다.
※ Queue<E> 컬렉션 클래스 예시
.3) Deque<E>
..(1) 외형구조는 큐와 유사하다.
..(2) 그러나 큐와 달리 양쪽 끝에서 넣고 빼는 것이 가능한 자료구조이다.
..(3) 따라서 덱을 스택처럼 사용하는 것이 가능하다.
..(4) 앞으로 넣고, 꺼내고, 확인하기 / 꺼낼 대상이 없거나 공간부족 시 예외 발생
void addFirst(E e) 넣기
E removeFirst() 꺼내기
E getFirst() 확인하기
..(5) 뒤로 넣고, 꺼내고, 확인하기 / 꺼낼 대상이 없거나 공간부족 시 예외 발생
void addLast(E e) 넣기
E removeLast() 꺼내기
E getLast() 확인하기
..(6) 예외 발생 없이 특정 값 반환하는 앞으로 넣고, 꺼내고, 확인하기
boolean offerFirst(E e) 넣기, 공간 부족하면 false 반환
E pollFirst() 꺼내기, 꺼낼 대상 없으면 null 반환
E peekFirst() 확인하기, 확인할 대상 없으면 null 반환
..(7) 예외 발생 없이 특정 값 반환하는 뒤로 넣고, 꺼내고, 확인하기
boolean offerLast(E e) 넣기, 공간이 부족하면 false 반환
E pollLast() 꺼내기, 꺼낼 대상 없으면 null 반환
E peekLast() 확인하기, 확인할 대상 없으면 null 반환
※ Deque를 Stack 처럼 사용하는 예시
MAP<K, V> 인터페이스를 구현하는 컬렉션 클래스들
,1) Key-Value 방식의 데이터 저장과 HashMap<K,V> 클래스
..(1) Map<K, V>를 구현하는 클래스는 Value를 저장할 때, 이를 찾을 때 사용하는 Key를
.....함께 저장하는 구조이다.
..(2) Key는 중복될 수 없다. Value는 중복 가능하다.(Key 가 다르다면.)
.2) HashMap<K, V>의 순차적 접근 방법
※ HashMap<K, V>의 순차적 접근 방법 예시
☞ Set<E>은 Iterable<E>을 상속하므로 for-each문, 반복자를 사용할 수 있다.
☞ Null값이 왜 나오는지 모르겠습니다 ㅠㅠㅠㅠ
.2) TreeMap<K, V>의 순차적 접근방법
..(1) TreeMAP<K, V>는 트리 자료구조를 기반으로 구현되어 있어서 정렬상태를 유지한다.
※ TreeMap<K, V>의 순차적 접근방법 예시
☞ Comparator<T> 인터페이스를 기반으로 내림차순으로 정렬할 수 있다.
class AgeComparator implements Comparator<Integer> {
publci int compare(Integer n1, Integer n2) {
return n2.intValue() - n1.intValue();
}}
컬렉션 기반 알고리즘
.1) 정렬(sort)
..(1) List<E>를 구현한 컬렉션 클래스들은 저장된 인스턴스를 정렬된 상태로 유지하지 않는다.
public static <T extends Comparable<? super T>> void sort(List<T> list)
..(2) 위 메소드를 통하여 sort 메소드를 호출한다.
..(3) T가 구현해야 할 인터페이스를 Comparable<? super T>로 명시하므로
......Ecar(예제참고)클래스는 다음 인터페이스 중 하나만 구현해도 위의
......sort 메소드 호출을 성공한다.