[자바의정석]Java - collection framework(3) #012

박정현·2022년 1월 27일
0

Java

목록 보기
12/16
post-thumbnail

HashSet

HashSet - 순서x , 중복x

  • List 순서o ,중복o HashSet과 반대
  • Set 인터페이스를 구현한 대표적인 컬렉션 클래스
  • 순서를 유지하려면 LinkedHashSet클래스를 사용
  • 저장하기전에 기존에 같은 객체가 있는지 확인한다
  • boolean add(Object o) 는 저장할 객체의 equals()와 hashCode()를 호출한다 equals(),hashCode()가 오버라이딩 되어 있어야 함

HashSet 주요 메서드

  • initalCapacity: 초기용량 , loadFactor: ex)0.8이면 80퍼만큼 차면 초기용량 변경
  • HashSet()
  • HashSet(Collection c)
  • HashSet(int initialCapacity)
  • HashSet(int initialCapcity,float loadFactor)
  • add(),addAll(),remove(),removeAll(Collection c),
    retainAll(Collection c)조건부삭제 차집합,
    clear()
  • cotains(Object o) 포함된 객체인지
    containsAll(Collection c) 모두포함하는지
    isEmpty(),size(),toArray(),toArray(Object[] a)

실습

  • HashSet 기본 특징

  • HashSet 랜덤 숫자 출력,정렬

  • HashSet 사용시 equals(),hashCode() 오버라이딩
    직접 코딩,이클립스를 이용해서도 가능

  • 교집합,차집합,합집합
    쉽게하는 방법으로 메소드 사용하면 쉽다

TreeSet

  • 범위 검색에 유리하다!
  • 이진 탐색 트리(binary search tree) 로 구현됨
  • 이진 트리는 모든 노드가 최대 2개의 하위 노드를 갖는다
  • 범위 검색과 정렬에 유리한 컬렉션 클래스
  • HashSet보다 데이터 추가, 삭제에 시간이 더 걸림

이진 탐색 트리(binary search tree)

  • 이진 트리의 한 종류이다
  • 부모보다 작은 값은 왼쪽 큰값은 오른쪽에 저장한다

TreeSet 데이터 저장 과정

  • 7,4,9,1,5 의 순서로 데이터를 저장하면
  • 트리를 따라 내려가면서 값을 비교 작으면 왼쪽 크면 오른쪽에 저장한다
  • 맨위에서 부터 비교하면서 내려간다

TreeSet 주요 생성자와 메서드

  • TreeSet()
  • TreeSet(Collection c) : 주어진 컬렉션을 저장
  • TreeSet(Comparator comp) : (정렬기준) 으로 정렬하는 TreeSet생성
  • Object first() : 정렬된 순서에서 첫 번째 객체를 반환
  • Object last() : 정렬된 순서에서 마지막 객체를 반환
  • Object ceiling(Object o) : 지정된 객체와 같은 객체를 반환, 없으면 큰 값을 가진 객체중
    가장 가까운 값의 객체를 반환
  • Object floor(Object o) : 지정된 객체와 같은 객체를 반환, 없으면 작은 값을 가진 객체중
    가장 가까운 값의 객체를 반환
  • Object higher(Object o) : 지정된 객체보다 큰 값을 가진 객체중 제일 가까운 값을 반환
  • Object lower(Object o) : 지정된 객체보다 작은 값을 가진 객체중 제일 가까운 값을 반환
  • SoertedSet subSet(Object fromElement, Object toElement) : 범위 검색 의 결과를 반환한다
  • SoertedSet headSet(Object toElement) : 지정된 객체보다 작은 값 반환
  • SoertedSet tailSet(Object fromElement) : 지정된 객체보다 큰 값 반환

TreeSet 실습

  • TreeSet 정렬기준 주기

TreeSet 범위검색

  • subSet(),headSet(),tailSet()
  • 검색 방법. ex) headSet 트리에서 50이라는 숫자보다 작은값은 전부 왼쪽아래의 값들

트리 순회(tree traversal)

  • 이진 트리의 모든 노드를 한번씩 읽는 것을 트리 순회라고 한다
  • 전위,중위,후위 순회법이 있으며 , 중위 순회하면 오름차순 정렬된다

HashMap

HashMap과 Hashtable

  • 순서x 중복x(키x,값o)
  • Map인터페이스를 구현한 대표적인 컬렉션 클래스
  • Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장
  • HashMap(동기화X)은 Hashtable(동기화O)의 신버전
  • 순서를 유지하려면, LinkedHashMap클래스를 사용하면된다

TreeMap

  • 키,값으로 저장
  • TreeSet과 같은 특성
  • 범위 검색과 정렬에 유리한 컬렉션 클래스
  • HashMap보다 데이터 추가,삭제가 더걸림

**HashMap의 키(Key)와 값(value)

  • 해싱 기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다
  • Map 인터페이스를 구현 데이터를 키와 값의 쌍으로 저장한다

해싱(1/3) 환자정보관리

  • 실생활에서 환자 정보관리
  • 년도별로 서랍에 00년 10년 20년 30년으로 환자 정보를 분류함
  • 주민번호 65xxxx-xxxxxxx 환자 정보를 찾을때 60년대 서랍에서 찾으면 시간 단축
  • 해시함수에서 key(주민번호)를 받으면 index(서랍,저장위치)를 알려준다
  • 해시함수를 이용해서 저장&읽기

해싱(2/3)

  • 해시함수로 해시테이블에 데이터를 저장,검색
  • key(주민번호)를 받으면 index(서랍,저장위치)를 알려준다
  • 해시테이블은 배열과 링크드 리스트가 조합된 형태
  • 배열의 장점: 접근성 , 링크드리스트 장점: 변경에유리 이걸 다 갖고있다
  • 데이터를 분류되어 저장해서 검색속도가 매우 빠르다

해싱(3/3)

  • 해싱테이블에 저장된 데이터를 가져오는 과정
  1. 키로 해시함수를 호출해서 해시코드를 얻는다 (몇번째 서랍에 있는지)
  2. 링크드 리스트에서 키와 일치하는 데이터를 찾는다
  • 해시함수는 같은 키에 대해 항상 같은 해시코드를 반환해야 한다.
    서로 다른 키일지라도 같은 값의 해시코드를 반환할 수도 있다.

HashMap - 주요메서드

  • HashMap()
  • HashMap(int initialCapacity)
  • HashMap(int initialCapacity, float loadFactor)
  • HashMap(Map m)
  • Object put(Object key,Object value) : 저장
  • Object put(Map m) : 전부 저장
  • Object remove(Object key) : 삭제
  • Object replace(Object key, Object value) : 변경
  • boolean replace(Object key, Object oldValue,Object new Value) : 변경
  • Set entrySet() : 키와 값을 쌍으로 얻어온다 / 읽기
  • Set keySet() : 키 값만 가져온 / 읽기
  • Collection values() : 값만 가져옴 /읽기
  • Object get(Object key) : 키를 넣으면 값을 반환함
  • Object getOrDefault(Object key, Object defaultValue):키를 넣어 반환 값이 없으면 디폴트 값을 반환한다
  • boolean containsKey,Value(Object key,Value) : 포함확인
  • size() , isEmpty(),clear(),clone()

HashMap 실습

  • 로그인 하기

  • 학생들 점수 보기, 총점,최저점,최고점 구하기

Collections

Collections 컬렉션을 위한 메서드(static)를 제공

  • 컬렉션 채우기 fill(), 복사 copy(), 정렬 sort() ,검색 binarySearch 등 제공
  • 컬렉션 동기화 : synchronizedXXX()
  • 변경불가 컬렉션 만들기 : unmodifiableXXX()
  • 싱글톤 컬렉션 만들기 : singletonXXX()
    객체하나만 저장할수있는 컬렉션
  • 한 종류의 객체만 저장하는 컬렉션 만들기 : checkedXXX()

Collections 메서드 실습


컬렉션 클래스 정리 & 요약

  • ArrayList : 무작위 검색 가능 , 추가 삭제가 힘듬 Object[]배열기반
    Stack 을 구현하기 적합

  • LinkedList : ArrayList에서 추가 삭제가 개선됨 대신 순차접근만 가능 검색도 순차로
    Queue 를 구현하기 적합
    연결기반을 변형해 TreeMap

  • TreeMap은 최대 2개까지만 연결 허용/ 범위검색,정렬의 장점이있다
    key만 이용 TreeSet

  • HashMap: 위의 두가지 장점을 결합 추가,삭제,검색 향상
    key 만 이용 HashSet

profile
빠샤

0개의 댓글