본문 바로가기
고급JAVA

Hashset

by 현닝이 2022. 7. 23.

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

Set의 성질을 그대로 상속받는다

Set은 객체를 중복해서 저장할 수 없고 하나의 null 값만 저장할 수 있다

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

만약 요소의 저장 순서를 유지해야 한다면  LinkedHashSet 클래스를 사용

Set 인터페이스를 구현한 클래스로는 HashSet과 TreeSet이 있다

HashSet의 경우 정렬을 해주지 않고 TreeSet의 경우 자동정렬을 해준다는

Set의 가장 큰 장점은 중복을 자동으로 제거해준다는 점입니다.

Set은 비선형 구조이기에 순서가 없으며 그렇기에 인덱스도 존재하지 않습니다.

따라서  값을 추가하거나 삭제할 때는 값이 Set 내부에 있는지 검색 한 뒤

추가나 삭제를 해야 하므로 속도가 List구조에 비해 느리다

 [Java] 자바 HashSet 사용법 & 예제 총정리 (tistory.com)  참조 !!!! ★

 

set에 데이터를 추가하는 경우 add() 메서드를 이용

      hs1.add("DD");
      hs1.add("AA");
      hs1.add("2");
      hs1.add("CC");
      hs1.add("BB");
      hs1.add(3);
      hs1.add(1);
      
      System.out.println("set 데이터: "+ hs1);
      System.out.println();

Set의 데이터의 순서가 X 중복을 허용하지 않는다

이미 있는 데이터를 add하면 false를 반환하고 데이터는 추가되지 않는다!

 boolean isAdded = hs1.add("FF");
      System.out.println("중복되지 않을때 "+ isAdded);
      System.out.println("set 데이터: "+ hs1);
      System.out.println();
      
      isAdded = hs1.add("CC");
      System.out.println("중복되지 않을때 "+ isAdded);
      System.out.println("set 데이터: "+ hs1);
      System.out.println();

Set은 수정하는 명령이 따로 없기 때문에

해당 자료를 삭제한 후 새로운 데이터를 추가해주어야 한다

 

<삭제하는 메소드>

1) clear()  => set데이터 전체 삭제

2) remove(삭제할 자료)  => 해당자료만 삭제

 

 hs1.remove("FF");
      System.out.println("삭제 후 set 데이터: "+hs1);
      System.out.println();
      
      hs1.add("EE");
      System.out.println("set 데이터: "+ hs1);
      
      hs1.clear();//전체자료 삭제
      System.out.println("set의 자료 개수: "+hs1.size());
      System.out.println();

set은 데이터의 순서가 없다

따라서 List처럼 인덱스로 데이터를 하나씩 불러올 수 X

데이터를 하나씩 얻기 위해서는 Iterator를 이용해야한다.

Iterator<데이터타입> iterator명 = 컬렉션.iterator();

 

 hasNext() => 포인터 다음 위치에 데이터가 있으면 true,없으면 false를  반환한다

//set의 데이터를 접근하기 위핸 Iterator 객체 가져오기
      Iterator it = hs1.iterator();
      
      //데이터 개수만큼 반복하기
      //hasNext() => 포인터 다음 위치에 데이터가 있으면 true,없으면 false를
      //              반환한다.
      
      while(it.hasNext()) { //다음 자료가 있는지 검사
         //next() => 포인터를 다음 자료위치로 이동하고 이동한 위치의 자료를 반환한다.
         System.out.println(it.next());
      }
      
      //1~100사이의 중복되지 않는 정수 5개 만들기
      Set<Integer> intRnd = new HashSet<Integer>();
      while(intRnd.size() < 5) {
         int num = (int)(Math.random() * 100 + 1);
         intRnd.add(num);
      }
      System.out.println("만들어진 난수들: "+intRnd);
      
      //Collection유형의 객체들은 서로다른 자료 구조로 쉽게 변경해서 사용할수 있다.
      //다른 종류의 객체를 생성할 때 생성자에 변경할 데이터를 넣어주면 된다.
      
      List<Integer> intRndList = new ArrayList<Integer>(intRnd);
      System.out.println("List 자료 출력...");
      
      for(int i= 0; i <intRndList.size();i++) {
         System.out.println(intRndList.get(i));
      }
      for(Integer num : intRndList) {
         System.out.print(num+" ");
      }
   }

'고급JAVA' 카테고리의 다른 글

Equals Hashcode  (0) 2022.07.23
Treeset  (0) 2022.07.23
Comparable / Comparator  (0) 2022.07.23
Stack & Queue  (0) 2022.07.23
ArrayList  (0) 2022.07.23