본문 바로가기

Daily/TIL

TIL 2022년 07월 10일

728x90

# 긍정의 한줄

"그 무엇도 바라지 마라"

We never reflect how pleasant it is to ask for nothing

아무것도 바랄 것이 없다는 것은 얼마나 큰 기쁨인지 우리는 미처 생각하지 못한다.

# 오늘의 독서

"어떻게 인생을 살 것인가?"

두려움을 이기는 가장 효과적인 방법, 정면 대결

 두려움을 이기는 유일한 방법은 바로 정면 대결이다. 두려움을 있는 그대로 인정하고 용감하게 두려움을 마주하라. 이를 해낸다면 당신은 그것만으로 큰 힘을 얻어 두려움을 극복해낼 수 있을 것이다. 뛰어난 사람이 되길 원한다면 두려움이 엄슴해오는 순간 나를 일깨우는 주문을 걸어라.

[쑤린, 어떻게 인생을 살 것인가(ⓒ다연,  2022), 139p]

# 자바의 정석 11장 16/16

Comparator와 Comparable  29:20

- 객체 정령에 필요한 메서드(정렬기준제공)를 정의한 인터페이스

Comparable 기본 정렬기준을 구현하는데 사용.
Comparator 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용

Ex11_7(정렬 예제, 역순 정렬, Comparator, Comparable 사용예제.)

Ex11_8(DescComp() 정렬 기준으로 정렬해주는 프로그램.)

 

HashSet(1) 14:46

▶HashSet 순서x, 중복x

- Set인터페이스를 구현한 대표적인 컬렉션 클래스.

- 순서를 유지하려면, Linked(연결)HashSet 클래스를 사용하면 된다.

▶TreeSet

- 범위 검색과 정렬에 유리한 컬렉션 클래스.

 

Ex11_9(HashSet에 저장된 요소들을 출력하는 프로그램.)

※ Iterator 객체를 이용하여 while 문으로 .hasNext() 메서드를 사용하여 읽어 올 객체가 남아있는 지 확인.

Ex11_10(Set은 정렬불가, List로 정렬)

1. Set의 모든 요소를 List에 저장

2. list를 정렬

3. list를 출력


HashSet(2) 19:53

- HashSet은 객체를 저장하기전에 기존에 같은 객체가 있는지 확인

같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.

- boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출

equals()와 hashCode()가 오버라이딩 되어 있어야 함.

Ex11_11.java(hashCode()와 equals() 사용 예제, 인스턴스 나자신(this)이름과 나이를 p와 비교하는 프로그램)

Ex11_12.java(집합 A, 집합 B, 두 집합의 합집합, 교집합, 차집합 만들어지는 과정을 보여주는 예제.)

setA.retainAll(setB); // 교집합.
setA.addAll(setB); // 합집합.
setA.remove(setB); // 차집합
System.out.println(setA);

.. 개꿀이네..

 

TreeSet(1) 12:48

범위 탐색, 정렬

- 이진 탐색 트리(binary search tree)로 구현. 범위 탐색과 정렬에 유리.

- 이진 트리(나무 뒤집은 모양)는 모든 노드가 최대 2개(0~2)의 하위 노드를 갖음

각 요소(node)가 나무(tree) 형태로 연결(LinkedList의 변형)

이진 탐색 트리(binary search tree)

- 부모보다 작은 값은 왼쪽 큰 값은 오른쪽에 저장

- 데이터가 많아질 수록 추가, 삭제에 시간이 더 걸림(비교 횟수 증가)

TreeSet - 데이터 저장과정 boolean add(Object o)

HashSet은 equals(), hashCode()로 비교, TreeSet은 compare()를 호출해서 비교.

단점 : 요소를 저장하며, 횟수가 점점 더 늘어나 시간이 많이 걸림. 

 

TreeSet(2) 23:06

주요 생성자와 메서드.

TreeSet(Comparator comp) 비교 기준 제공.

Ex11_13.java(TreeSet은 범위 검색, 정렬, 정렬 필요없음, HashSet() 정렬필요)

TreeSet은 비교기준이 꼬오오오옥 필요하다, 추가 삭제에 시간이 많이 걸림!!

Ex11_14.java(TreeSet() 범위검색, subSet으로 범위 출력하기.)

Ex11_15.java(headSet(), tailSet() 사용예제)

 

HashMap(1) 16:48

- Map인터페이스를 구현. 데이터와 키와 값의 쌍으로 저장.(순서x, 중복(키x, 값o))

- HashMap(동기화X)은 Hashtable(동기화O)의 신버전

▶ HashMap

- Map인터페이스를 구현한 대표적인 컬렉션 클래스

- 순서를 유지하려면, LinkedHashMap클래스를 사용하면 된다.

- 해싱(hashing)기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다.

- Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장.

TreeMap = TreeSet(같은 특성)

- 범위 검색과 정렬에 유리한 컬렉션 클래스

- HashMap보다 데이터 추가, 삭제에 시간이 더 걸림.(비교해가면서 저장하기 때문에..)

 

해싱이란?

- 해시함수를 이용해서 저장하고 읽어오는 것.

- hash function로 hash table에 데이터를 저장, 검색 하는것.

- hash table은 배열과 링크드 리스트가 조합된 형태(2차원 배열)

 

▶hashTable에 저장된 데이터를 가져오는 과정

ⓛ 키로 hash function을 호출해서 hash code를 얻는다.

② hash code를 (hash function 반환값)에 대응하는 linked list를 배열에서 찾는다.

③ linked list 에서 key와 일치하는 data를 찾는다.

※ hash function 같은 key에 대해 항상 같은 hash code를 return해야 한다.

서로 다른 key일지라도 같은 value의 hash code를 return 할 수 있다.

 

HashMap(2) 19:07

HashMap의 주요메서드

Ex11_16.java(id, password 입력 예제 프로그램.)

Ex11_17.java(총점, 평균, 최고점수, 최저점수 출력 프로그램.)

key 값이같다면 value값이 바뀐다.

Ex11_18.java(빈도수(몇번 나왔는지) 계산 프로그램)

 

Collections클래스, 컬렉션 클래스 요약. 24:25

- Objects 객체, Array 배열, Collections 컬렉션

- 컬렉션 채우기, 복사, 정렬, 검색 = fill(), copy(), sort(), binarySearch() 등

- 컬렉션의 동기화 - synchronizedXXX()

- 변경불가(readOnly) 컬렉션 만들기 - unmodifiableXX() 수정불가!!

- 싱글톤 컬렉션 만들기 - SingletonXXX() 객체 한개만 저장.

- 한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX(), 한가지 타입 저장 가능.

반응형

'Daily > TIL' 카테고리의 다른 글

TIL 2022년 7월 12일  (0) 2022.07.12
TIL 2022년 07월 11일  (0) 2022.07.11
TIL 2022년 07월 09일  (0) 2022.07.09
TIL 2022년 07월 08일  (0) 2022.07.08
TIL 2022년 07월 07일  (0) 2022.07.07