About ‘Hash’

SUUUI·2025년 2월 9일

java

목록 보기
1/16

Hash Table

• (Key, Value)로 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료구조
• 내부적으로 배열(버킷)을 사용하여 데이터를 저장
• 해시 테이블은 각각의 Key값에 해시함수를 적용해 배열의 고유한 index를 생성하고, 이 index를 활용해 값을 저장하거나 검색

ex) nosql의 redis 의 구조도 hash 구조로 되어있다

HashSet

  • HashSet<String> 이름 = new HashSet<>();
  • Java에서 제공하는 집합(Set) 자료구조의 구현체 중 하나
  • 중복된 데이터를 허용하지 않고, 요소를 저장하는 순서를 보장하지 않음
  • 빠른 데이터 검색 , 삽입 , 삭제 , null 값 허용
  • 이름이 해쉬브라운이 생각남

HashSet 생성자

  • HashSet( ) : 빈 HashSet을 생성한다
  • HashSet ( Collection C ) : Collection C의 요소로 초기화된 HashSet을 생성한다
  • HashSet ( int initialCapacity) : 지정된 초기 용량을 가진 HashSet을 생성한다.
  • HashSet( int initialCapacity , float loadFactor ) : 지정된 초기 용량 , 로드 개수를 가진 HashSet을 생성

HashSet의 주요 메서드

| add(E e) | 요소 추가 (중복된 값이면 무시) |
| remove(Object o) | 특정 요소 제거 |
| contains(Object o) | 특정 요소가 포함되어 있는지 확인 (검색) |
| isEmpty() | 집합이 비어 있는지 확인 |
| size() | 집합에 있는 요소의 개수 반환 |
| clear() | 집합의 모든 요소 제거 |
| iterator() | 요소를 순회하기 위한 Iterator 반환 |

HashSet vs ArrayList

  • Set :중복 된 객체 , 요소 x
  • ArrayList : 중복 된 객체 , 요소 허용
  • map : 키 (중복x) , 값(value) 으로 데이터를 저장

💡

map 을 활용하는 법 익히기

LinkedHashSet , TreeSet 개념 분리 하기 ( 헷깔림 )

  • HashSet 예제
    import java.util.HashSet;
    
    public class HashSetExample {
        public static void main(String[] args) {
            // HashSet 생성
            HashSet<String> set = new HashSet<>();
    
            // 요소 추가
            set.add("Apple");
            set.add("Banana");
            set.add("Cherry");
            set.add("Apple"); // 중복된 요소는 추가되지 않음
    
            System.out.println("HashSet 내용: " + set); // 순서는 보장되지 않음
            //HashSet 내용: [Cherry, Apple, Banana]
    
            // 요소 포함 여부 확인
            System.out.println("Banana가 포함되어 있나요? " + set.contains("Banana"));
            //Banana가 포함되어 있나요? true
            
    
            // 요소 제거
            set.remove("Banana");
            System.out.println("Banana 제거 후: " + set);
            //Banana 제거 후: [Cherry, Apple]
    
            // 크기 확인
            System.out.println("HashSet 크기: " + set.size());
            //HashSet 크기: 2
    
            // 모든 요소 제거
            set.clear();
            System.out.println("HashSet이 비었나요? " + set.isEmpty());
            //HashSet이 비었나요? true
        }
    }
    
  • 해쉬브라운을 이용하면 배열의 중복을 제거 할 수 있다 !
    import java.util.HashSet;
    
    public class RemoveDuplicates {
        public static void main(String[] args) {
            String[] fruits = {"Apple", "Banana", "Apple", "Cherry", "Banana"};
            //중복된 객체가 있는 문자열 배열 선언 
            
            //HashSet 을 이용한 중복 제거
            HashSet<String> uniqueFruits = new HashSet<>();
            //빈 HashSet 선언 
            for (String fruit : fruits) {
            //fruits 배열의 문자열 객체들을 fruit 라는 이름으로 뽑아서 
                uniqueFruits.add(fruit);
            //uniqueFruits에 추가 한다 
            }
    
            System.out.println("중복 제거 결과: " + uniqueFruits);
        }.  //중복 제거 결과: [Cherry, Apple, Banana]
    }
    
  • for 문을 이용한 HashSet 데이터 순회
    import java.util.HashSet;
    import java.util.Iterator;
    
    public class IterateHashSet {
        public static void main(String[] args) {
            HashSet<String> set = new HashSet<>();
            //HashSet 선언 
            set.add("Dog");
            set.add("Cat");
            set.add("Horse");
            //요소 추가 
    
            // for-each 반복
            System.out.println("for-each 반복:");
            for (String animal : set) {
            //요소들을 animal 로 구분짓고 순회 
                System.out.println(animal);
            }
    
            // Iterator를 이용한 반복
            System.out.println("\nIterator 반복:");
            Iterator<String> iterator = set.iterator();
            while (iterator.hasNext()) {
                System.out.println(iterator.next());
            }
        }
    }
    
profile
간단한 개발 기록

0개의 댓글