본문 바로가기

라이브러리 활용 - 컬렉션 자료구조

Set 컬렉션

Set 컬렉션

  • Set 컬렉션은 저장 순서가 유지되지 않음
  • 객체를 중복해서 저장할 수 없고, 하나의 null만 저장할 수 있음(수학의 집합 개념)


    출처, 이것이 자바다



    출처, 이것이 자바다


HashSet


출처, 이것이 자바다


  • 동등 객체를 중복 저장하지 않음
  • 다른 객체라도 hashCode() 메소드의 리턴값이 같고, equals() 메소드가 true를 리턴하면 동일한 객체라고 판단하고 중복 저장하지 않음


    출처, 이것이 자바다


package ch15.sec03.exam01;

import java.util.HashSet;
import java.util.Set;

/*
 * Set 인터페이스 : 순서가 없다(주머니). 중복저장 불가능(중복체크).
 */

public class HashSetExample {

    public static void main(String[] args) {

        //부모인터페이스 변수 = 구현객체;
        Set<String> set = new HashSet<String>();

        //객체 저장. 저장시 중복검사가 진행됨.
        set.add("Java"); 
        set.add("JDBC");
        set.add("Servlet/JSP");
        set.add("Java"); //중복. 저장 불가능
        set.add("MyBatis");

        //객체 수 확인
        int size = set.size();
        System.out.println("총 객체 수: " + size); //4. 중복저장이 안됨.
    }
}

package ch15.sec03.exam02;

public class Member /* extends Object */ {

    public String name;
    public int age;

    public Member(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //동등한 객체확인
    @Override
    public int hashCode() {
        System.out.println("hashCode() 호출");
        return name.hashCode() + age; //"홍길동30"
    }

    @Override
    public boolean equals(Object obj) {
        System.out.println("equals() 호출");
        if(obj instanceof Member) {
            Member member = (Member) obj;
            return member.name.equals(name) && (member.age==age);
    } else {
        return false;
    }
  }    
}

package ch15.sec03.exam02;

import java.util.HashSet;
import java.util.Set;

public class HashSetExample {

    public static void main(String[] args) {
        Set<Member> set = new HashSet<Member>();

        //Member객체 저장
        set.add(new Member("홍길동", 30)); // hashCode() : true -> equals() : true -> 동등한 객체존재.
        set.add(new Member("홍길동", 30));

        //객체 수 출력
        System.out.println("총 객체 수: " + set.size());
    }
}

  • iterator() 메소드: 반복자를 얻어 Set 컬렉션의 객체를 하나씩 가져옴


    출처, 이것이 자바다



    출처, 이것이 자바다


package ch15.sec03.exam03;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/*
 Set 인터페이스 : 반복자(Iterator)를 이용하여, 컬렉션 저장소의 모든 데이터를 읽어온다.
 */

public class HashSetExample {

    public static void main(String[] args) {

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

        //객체추가
        set.add("Java");
        set.add("JDBC");
        set.add("JSP");
        set.add("Spring");

//        int size = set.size();

        //for문을 못쓸거 같을때 iterator가 있는지 확인해보기
        Iterator<String> iterator = set.iterator();

        while(iterator.hasNext()) {
         String element = iterator.next();
         System.out.println(element);
         if(element.equalsIgnoreCase("JSP")) {
             iterator.remove(); //set컬렉션에서 제거
             }
        }
        System.out.println();

        //객체 제거
        set.remove("JDBC");

        //향상된 for문
        for(String element : set) {
            System.out.println(element);
        }
    }
}

'라이브러리 활용 - 컬렉션 자료구조' 카테고리의 다른 글

LIFO와 FIFO 컬렉션  (0) 2023.02.01
검색 기능을 강화시킨 컬렉션  (0) 2023.02.01
Map 컬렉션  (0) 2023.02.01
List 컬렉션  (0) 2023.02.01
컬렉션 프레임워크  (0) 2023.01.31