티스토리 뷰

개발일지/TIL

HashSet 이란?

OH!Lee 2022. 7. 20. 20:52
반응형

 HashSet은 Set인터페이스의 구현 클래스이다. 그렇기에 Set의 성질을 그대로 상속받는다 Set은 객체를 중복해서 저장할 수 없고 하나의 null 값만 저장할 수 있다. 또한 저장 순서가 유지되지 않는다. 만약 요소의 저장 순서를 유지해야 한다면 JDK 1.4부터 제공하는 LinkedHashSet 클래스를 사용하면 된다. Set 인터페이스를 구현한 클래스로는 HashSet과 TreeSet이 있는데 HashiSet의 경우 정렬을 해주지 않고 TreeSet의 경우 자동정렬을 해준다는 차이점이 있다. Set의 가장 큰 장점은 중복을 자동으로 제거해준다는 점이다. 비선형 구조이기에 순서가 없으며 그렇기에 인덱스도 존재하지 않는다. 값을 추가하거나 삭제할 때에는 내가 추가 혹은 삭제하고자 하는 값이 Set 내부에 있는지 검색 한 뒤 추가나 삭제를 해야 하므로 속도가 List구조에 비해 느리다.


HashSet 사용법

HashSet 선언

HashSet<Integer> set1 = new HashSet<Integer>();//HashSet생성
HashSet<Integer> set2 = new HashSet<>();//new에서 타입 파라미터 생략가능
HashSet<Integer> set3 = new HashSet<Integer>(set1);//set1의 모든 값을 가진 HashSet생성
HashSet<Integer> set4 = new HashSet<Integer>(10);//초기 용량(capacity)지정
HashSet<Integer> set5 = new HashSet<Integer>(10, 0.7f);//초기 capacity,load factor지정
HashSet<Integer> set6 = new HashSet<Integer>(Arrays.asList(1,2,3));//초기값 지정

HashSet을 기본으로 생성했을 때에는 initail capacity(16), load factor(0.75)의 값을 가진 객체가 생성된다. HashSet도 저장공간보다 값이 추가로 들어오면 List처럼 저장공간을 늘리는데 Set은 한 칸씩 저장공간을 늘리지 않고 저장용량을 약 두배로 늘린다. 여기서 과부하고 많이 발생하기 때문에 초기에 저장할 데이터 개수를 알고 있다면 Set의 초기 용량을 지정해 주는 것이 좋다.

 

HashSet 값 추가

HashSet<Integer> set = new HashSet<Integer>();//HashSet생성
set.add(1); //값 추가
set.add(2);
set.add(3);

HashSet에 값을 추가하려면 HashSet의 add(value)메소드를 사용하면 된다. 입력되는 값이 HashSet 내부에 존재하지 않는다면 그 값을 HashSet에 추가하고 true를 반환하고 내부에 값이 존재한다면 false를 반환한다.

 

HashSet 값 삭제

HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성
set.remove(1);//값 1 제거
set.clear();//모든 값 제거

HashSet에 값을 제거하려면 HashSet의 remove(value) 메소드를 사용하면 된다. 매개변수 value의 값이 HashSet 내부에 존재한다면 그 값을 삭제한 후 true를 반환하고 없다면 false를 반환한다. 몬든 값을 제거하려면 clear() 메소드를 사용하면 된다.

 

HashSet 크기 구하기

HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성
System.out.println(set.size());//set 크기 : 3

HashSet의 크기를 구하려면 size() 메소드를 사용하면 된다.

 

HashSet 값 출력

HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성

System.out.println(set); //전체출력 [1,2,3]

Iterator iter = set.iterator();    // Iterator 사용
while(iter.hasNext()) {//값이 있으면 true 없으면 false
    System.out.println(iter.next());
}

Set컬랙션을 그냥 print하게되면 대괄호[ ] 로 묶여서 set의 전체 값이 출력된다. Set에는 인덱스로 객체를 가져오는 get(index) 메소드가 없다. 대신 전체 객체를 대상으로 한 번씩 반복해서 가져오는 반복자(Iterator)를 제공한다. 반복자 이터레이터 인터페이스를 구현한 객체를 말하는데 iterator() 메소드를 호출하면 얻을 수있다. Iterator에서 하나의 객체를 가져올 때는 next() 메소드를 사용한다. next() 메소드를 사용하기 전에 먼저 가져올 객체가 있는지 확인하는 것이 좋다. hasNext() 메소드는 가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴한다.

 

HashSet 값 검색

HashSet<Integer> set = new HashSet<Integer>(Arrays.asList(1,2,3));//HashSet생성
System.out.println(set.contains(1)); //set내부에 값 1이 있는지 check : true

HashSet 내부에 원하는 값이 있는지 확인하고 싶다면 contains(value) 메소드를 사용하면 된다. 파라미터로 주어진 객체가 HashSet이 가지고 있다면 true, 아니면 false를 반환한다.

 

출처: https://coding-factory.tistory.com/554

반응형

'개발일지 > TIL' 카테고리의 다른 글

SQL 기본문법 정리  (0) 2022.10.13
TreeSet이란?  (0) 2022.07.20
JPA 연관관계, Spring Dada JPA  (0) 2022.07.18
DB의 연관관계 이해  (0) 2022.07.18
JPA 영속성 컨텍스트 이해  (0) 2022.07.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함