[Java] Set, HashSet

고동이의 IT·2021년 11월 1일
0

Java

목록 보기
12/37
post-thumbnail

List와 Set의 차이점

1. List

  • 데이터의 순서(index)가 있다.
  • 중복된 데이터를 저장할 수 있다.

2. Set

  • Set은 비선형 자료구조이기 때문에 저장한 순서대로 값이 저장되지 않아서 데이터의 순서(index)가 없다.
  • 중복되는 데이터를 저장할 수 없다. 해시의 경우 값 자체가 메모리 주소가 되기 때문에, 같은 위치에 두 개의 값을 저장할 수는 없고, 한 번만 저장

3. Hash

  • 저장하고자 하는 값을 어떤 값과도 중복되지 않는 숫자 코드로 변환(이를 해시 코드라 지칭)하여 해당 코드의 메모리 위치에 값을 저장하는 방법

HashSet 생성

HashSet hs1 = new HashSet<>();

HashSet 데이터 추가

  • add() 메서드 이용
  • set에 중복되는 데이터를 추가하면 false를 반환하고 데이터는 추가되지 않는다.
                         hs1.add("DD");
			 hs1.add("AA");
			 hs1.add(2);
			 hs1.add("CC");
			 hs1.add("BB");
			 hs1.add(1);
			 hs1.add(3);

HashSet 데이터 수정

  • Set의 데이터를 수정하려면 수정하는 명령이 따로 없기 때문에 해당 자료를 삭제한 후에 추가해주는 방식으로 처리한다.
  • 삭제하는 메서드 : remove(삭제할데이터)
    반환값: 삭제성공(true), 삭제실패(false)
    - clear() : 전체 데이터 모두 삭제

예제) "FF" 데이터를 "EE"로 변경하기.

 hs1.remove("FF");
System.out.println("삭제한 후 set "+ hs1);
			 
 hs1.add("EE");
System.out.println(hs1);
 hs1.clear();
System.out.println("전체 삭제 후 set "+ hs1);

HashSet 데이터 불러오기 - Iterator

  • Set의 데이터는 순서(index)가 없기 때문에 List처럼 index로 데이터를 하나씩 불러올 수 없다.
    그래서 데이터를 하나씩 얻기 위해서는 Iterator형 객체로 변환해야한다.
  • Set형의 데이터들을 Iterator형 객체로 변환하는 메서드 : iterator()

Set 데이터를 Iterator로 변환하기.

Iterator it = hs1.iterator();

hasNext()

  • Iterator의 포인터가 가리키는 곳 다음 번째에 데이터가 있는지 검사한다.
    (데이터가 있으면 true, 없으면 false 반환)

    next()

  • Iterator의 포인터가 가리키는 곳 다음번째 위치로 이동한 후 그 곳의 데이터를 읽어와 반환한다.
  while(it.hasNext()){
	 System.out.println(it.next());
			 }
			 
	 
 // 향상된 for문을 사용하면 Iterator를 사용한 효과를 낼 수 있다.
 for(Object data : hs1){
	 System.out.println(data);
			 }

Set유형의 데이터를 List형으로 변환하기

 ArrayList<Integer> testList = new ArrayList<>(testSet);
			 
System.out.println("List 데이터 출력");
for(int i=0; i<testList.size(); i ++){
System.out.println(testList.get(i));
			 }
                                                          
profile
삐약..뺙뺙

0개의 댓글