[혼자 공부하는 자바] 8/1 13-1 [Set 컬렉션] [Set 인터페이스] [HashSet]

2020. 8. 2. 19:04·JAVA
목차
  1. Set컬렉션
  2. HashSet
  3. 연습문제 08
728x90


Set컬렉션

 

객체를 저장하는 Set컬렉션

ㅇList컬렉션과 다른 점

ㄴ저장 순서가 유지되지 않는다.

ㄴ객체를 중복해서 저장할 수 없다!! + 하나의 null만 저장 가능

ㄴ수학의 집합과 성격이 비슷

ㄴ인덱스로 관리하지 않는다 (순서 개념 자체가 없음)

 

 

Set 컬렉션에는 HashSet, LinkedHashSet, TreeSet 등이 있다.

이들은 Set인터페이스의 컬렉션클래스(구현클래스)이다.

 

<<Set컬렉션에서 공통적으로 사용 가능한 Set인터페이스의 메소드 정리>>

기능 메소드 설명
객체 추가 boolean add(E e) 객체를 저장. 성공적으로 저장되면 true를 리턴, 중복 객체면 false 리턴
객체 검색 boolean contains(Object o) 주어진 객체가 저정되어있는지 조사
boolean isEmpty() 컬렉션이 비어있는지 조사
Iterator<E> iterator() 저장된 객체를 한 번씩 가져오는 반복자 리턴
int size() 저장된 전체객체 수를 리턴
객체 삭제 void clear() 저장된 모든 객체 삭제
boolean remove(Object o) 주어진 객체 삭제

 

Set컬렉션에 String객체가 들어가게 해보자.

Set<String> set = ...;

set.add("냥냥이");

set.add("야옹야옹");

set.remove("냥냥이"); 

 


 

Set 컬렌션은 객체를 인덱스를 통해 가져올 수 없다. 집합의 개념으로 보지 순서가 있는 인덱스 개념은 없다.

대신 그 전체 객체를 대상으로 해서 한번씩 가져오게 하는 반복자(Iterator)를 제공한다.

반복자는 Iterator 인터페이스를 구현한 객체로, iterator()메소드를 호출해 얻을 수 있다.

 

Set<String> set = ...;

Iterator<String> iterator = set.iterator();

 

 

++Iterator 인터페이스에 선언된 메소드들

리턴타입 메소드 설명
boolean hasNext() 가져올 객체가 있는지 true or false
E next() 컬렉션에서 하나의 객체 가져오기
void remove() Set컬렉션에서 객체 제거

>>next()메소드 사용 전에 (컬렉션에서 객체하나 가져오기 전에)

hasNext()메소드로 '가져올 객체가 있는지 먼저'확인하는 게 좋다. 

hasNext()에서 true가 리턴될 때 next()로 객체를 가져오자. 

 

 

<<Set컬렉션에서 String객체를 반복해 가져오기>>

 

ㅇIterator 사용

Set<String> set = ...;
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
  //String 객체 하나를 가져옴
  String str = iterator.next();
}


Iterator의 next() 메소드로 가져온 객체를 제거하고 싶다면 remove()메소드를 호출한다.
Iterator의 메소드이지만 실제 Set컬렉션에서의 객체가 제거된다.
Set컬렉션에서 "홍길동"을 제거해보자.

while(iterator.hasNext()) {
  String str = iterator.next();
  if(str.equals("홍길동")) {
    iterator.remove();
  }
}

ㅇ향상된 for문 사용

Set<String> set = ...;
for(String str : set) {  //저장된 객체 수만큼 루핑
} 

 

 

 


Set인터페이스의 구현클래스

HashSet

HashSet 생성하기 : Set<E> set = new HashSet<E>();

 

마찬가지로 타입파라미터 E에는 컬렉션에 저장할 객체 타입 넣는다.

Set<String> set = new HashSet<String>();

Set<String> set = new HashSet<>();  

해시셋 생성할 때 해시셋쪽에 타입파라미터 안쓰면 왼쪽에 써준 Set에 지정된 타입을 따라간다.

 

 

HashSet

ㄴ역시 객체들을 순서없이 저장 + 동일객체는 중복저장하지 않음

ㄴ동일객체란? => hashCode()리턴값 같고 equals()리턴값까지 true여야 한다.

동일한 객체는 꼭 같은 인스턴스를 뜻하지는 않는다.

ㄴ문자열을 HashSet에 저장할 때를 보자 : 동등한 객체인지 판단할 때, String객체에 '같은 문자열'이 저장되어있기만 한다면 동일한 객체로 간주한다. "String클래스에서 hashCode()와 equals() 메소드를 재정의했기 때문 -> 같은 문자열일 때 hashCode()리턴값 같게, equals리턴값 true가 나오게"  관련내용 복습

 

 

<<예제: HashSet에 String객체 넣기>> cf) 중복 없이 저장

 

 

 

HashSet 컬렉션클래스 내부의 이 '동일객체판단'기능을 이해해보자. 

 

>>Member클래스를 정의하고 여기서 hashCode()와 equals()메소드를 재정의해보자.

인스턴스가 달라도 이름, 나이가 동일하면 동일한 객체로 간주하도록 재정의하자. (<-중복저장방지)

 


연습문제 08

728x90

'JAVA' 카테고리의 다른 글

[혼자 공부하는 자바] 8/9 13-1 [Map 컬렉션] [Map인터페이스] [HashMap] [Hashtable]  (0) 2020.08.09
[4주차] 기본미션 + 선택미션 [혼공단] [혼공자]  (0) 2020.08.02
[혼자 공부하는 자바] 7/31 13-1 [List 컬렉션] [ArrayList] [Vector] [LinkedList]  (0) 2020.07.31
[혼자 공부하는 자바] 7/31 13-1 [컬렉션 프레임워크]  (0) 2020.07.31
[혼자 공부하는 자바] 7/30 12-2 [스레드 제어] [스레드 일시정지] [sleep()] [안전한 종료] [interrupt()] [InterruptedException] [주스레드] [데몬스레드]  (0) 2020.07.31
  1. Set컬렉션
  2. HashSet
  3. 연습문제 08
'JAVA' 카테고리의 다른 글
  • [혼자 공부하는 자바] 8/9 13-1 [Map 컬렉션] [Map인터페이스] [HashMap] [Hashtable]
  • [4주차] 기본미션 + 선택미션 [혼공단] [혼공자]
  • [혼자 공부하는 자바] 7/31 13-1 [List 컬렉션] [ArrayList] [Vector] [LinkedList]
  • [혼자 공부하는 자바] 7/31 13-1 [컬렉션 프레임워크]
히어로맛쿠키
히어로맛쿠키
  • 히어로맛쿠키
    yeny_lab
    히어로맛쿠키
  • 전체
    오늘
    어제
    • 분류 전체보기 (386)
      • 미분류글 (30)
        • ㅇ (2)
      • JAVA (84)
        • Effective Java (1)
        • Application (21)
      • 컴퓨터구조 & OS (28)
      • 자료구조 + 알고리즘 (43)
      • Database (12)
      • 컴파일러 (10)
      • 수학 (33)
        • 미분방정식 (12)
      • 데이터분석과 머신러닝 (38)
      • 기타 (58)
      • yyeeennyy (25)
  • 블로그 메뉴

    • 링크

    • 공지사항

      • ^o^/♡
    • 인기 글

    • 태그

      코드업
      input-output
      16비트 컴퓨터
      혼공머신
      codeup
      사후분석
      알고리즘
      미분방정식
      한빛미디어
      혼공자
      혼공학습단
      정렬
      R데이터분석
      혼공단
      컴퓨터구조
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.4
    히어로맛쿠키
    [혼자 공부하는 자바] 8/1 13-1 [Set 컬렉션] [Set 인터페이스] [HashSet]

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.