본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 20일차(TreeSet<E>, Comparator T, Queue, Deque, Map<K, V>, sort)

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 메소드 호출을 성공한다.