🚀 학습 목표 & 예상 결과
- 자바의 신 24장 읽기 1시간 30분 -> 6시간
- 알고리즘 문제 1개 풀기 3시간 -> 30분
📌TIL
24장 - 컬렉션 파트 3 (Map)
- Map
- 모든 값에는 키와 값이 존재하며, 키는 해당 Map에서 고유해야 한다. (값은 중복돼도 상관없다.)
- 구현한 클래스는 다양하나 HashMAp, TreeMap, LinkdedHashMap이 가장 유명하다.
- null이 저장 가능하며, Not Thread-safe 이다.
- 컬렉션 뷰(Collection view)를 사용하며, 키-값 쌍으로 데이터를 순환하여 처리한다.
- Collection view : 데이터를 조회, 수정, 삭제하는 컬렉션 동작을 수행 가능.
- 이터레이션을 처리하는 도중 데이터를 삭제하는 안전한 방법을 제공한다.
- 이터레이션 : 반복적인 프로세스 또는 동작. (반복문)
- Hashtable
- Hashtable 클래스는 Enumeration 객체를 통해 데이터를 처리한다
- Enumeration : 열거 대상의 다음 요소를 가져오는 형식으로 읽기 전용이다.
- 키-값 쌍으로 데이터를 순환하여 처리할 수 없다.
- null값이 저장 가능하고, Thread-safe 하다.
- 1.2부터 제공되는 Collection 관련 클래스를 Thread-safe 하게 사용하려면 특정 처리가 필요하거나 이름에 Concurrent가 포함되어 있어야 한다.
- HashMap
- 상속 관계 : java.lang.Object <- java.util.AbstaractMap<K,V> <- java.util.HashMAp<K,V>
- 구현 인터페이스 : Serializable, Cloneable, Map<E>
- 생성자 : HashMap(), HashMap(int initialCapacity), HashMap(int initialCapacity, float loadFactor), HashMap(Map<? extends K, ? extends V> m)
- HashMap(Map<? extends K, ? extends V> m) : Map을 구현한 객체에 있는 데이터를 갖는 HashMap 객체를 생성
- HashMap에 객체가 들어가면 hashCode() 메소드의 결과 값에 따른 버켓(buket)이라는 목록(list)형태의 바구니가 만들어진다.
- 서로 다른 키가 저장되었는데, hashCode() 메소드의 결과가 동일하다면 이 버켓에 여러 개의 값이 들어갈 수 있다. (자세한 내용이 궁금하다면 java map buckets를 검색해 보자.)
- 존재하지 않는 키 값으로 get을 요청하면 null이 반환된다.
- TreeMap
- Key를 정렬하면서 저장하는 Map. (숫자 > 알파벳 대문자 > 소문자 > 한글" 순)
- HashMap보다는 느리다. 그러나 많은 데이터를 정렬해야 할 필요가 있다면 HashMap보다는 TreeMap을 사용하는 것이 더 유리하다.
- Properties 클래스
- Hashtable을 확장(상속)한 System에 속한 클래스로 디렉터리나 파일에 관련된 값들을 저장한다.(빠르게 속성 확인을 하기에 좋다.)
- 객체에 시스템 속성만 저장하는 것은 아니다. 프로그램 내에서 사용할 여러 속성값들을 Properties 클래스를 사용해 데이터를 처리하면 파일을 읽고 쓰는 메소드를 손쉽게 이용할 수 있다.
- HashMap 등을 이용해 만든다면 따로 파일을 읽는 메소드나 쓰는 메소드를 만들어야 한다!
- 따라서 파일에 관련된 저장과 읽기 클래스를 사용해야 할 때, Properties클래스를 알고 있다면 도움이 될 수 있다.
자바의 자료구조
- Collection
- Set
- List
- ArrayList
- (List & Queue) LinkedList
- Queue
- (List & Queue) LinkedList
- PriorityQueue
- Map
알고리즘 문제풀이 - 폰켓몬
프로그래머스 1레벨 문제 - 폰켓몬
풀이내용은 해당 링크를 참고해 주길 바란다.
int[] 배열을 Set으로 변환하는 방법
- int배열을 Arrays의 stream()메소드와 boxed()메소드를 통해 스트림으로 변환 후, collect(Collectors.toSet()) 를 이용해 변환.
- stream : 데이터를 추상화하여 처리할 수 있게 만드는 기술. (stream()은 데이터를 스트림으로 변환한다.)
- boxed() : IntStream을 Stream<Integer>로 변환한다.
- collect : 스트림 요소를 수집하여 새로운 컬렉션을 생성하는 데 사용되는 메소드.
- Collectors.toSet() : HashSet으로 변환할 수 있는 Collector
🔗 Feedback
◾ 예상 결과 <> 실제 결과
집중이 잘 되지 않아 자바의 신 24장을 이해하는데 너무 오랜 시간이 걸렸다.
정작 이렇게 이해해 놓고도 잘 모르겠어서 관련 알고리즘을 풀어봤는데 역시나 조금 잘못이해하고 있더라.
해당 내용은 다시 복습을 진행하려고 한다.
◾ 성공 비결 & 실패 이유
아무튼 한 것
처참한 집중력
◾ 좋았던 것, 부족했던 것, 개선할 것, 긍정 한마디
- 좋았던 것: 아무튼 한 것. 집중이 안 돼도 붙잡고 있었던 것.
- 부족했던 것: 집중력을 다시 끌어올리지 못한 것.
- 개선할 것: 잘 모르겠다. 컨디션 관리...? 집중력 관리...??
- 긍정 한마디: 컨디션이 좋지 않았는데도 공부한 것 너무 멋있다. 오늘 하루도 수고했어!
◾ 결론
- 아무튼 열심히 한 것 너무 대단하고 수고했다.
- Set에 바로 int 배열을 넣을 수는 없다.
- 다음번에 1레벨 문제를 풀게 된다면 여러 개를 풀어보자.