새소식

Reflections/Daily

20일차 - 자바의신 24장, Map, Hashtable, HashMap, TreeMap, Properties, Stream, int[] 배열을 Set으로 변환하는 법

  • -

 

🚀 학습 목표 & 예상 결과

 

  • 자바의 신 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
      • HashSet
        • LinkedHashSEt
      • TreeSet
    • List
      • ArrayList
      • (List & Queue) LinkedList
    • Queue
      • (List & Queue) LinkedList
      • PriorityQueue
  • Map
    • HashMap
      • LinkedHashMap
    • TreeMap

 

알고리즘 문제풀이 - 폰켓몬

프로그래머스 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레벨 문제를 풀게 된다면 여러 개를 풀어보자.
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.