List와 Set (HashSet)

조수경·2021년 11월 1일
0

고급자바

목록 보기
7/97

List와 Set의 차이점

    1. List: 책꽃이에 책이 꽂혀있는것(0,1,2,3,4)
   - 데이터의 순서(index)가 있다.
   - 중복된 데이터를 저장할 수 있다.
   
    2. Set: 큰 주머니에 데이터를 넣어서 데이터가 섞이는 것
   - 데이터의 순서가(index) 없다.
   - 중복되는 데이터를 저장할 수 없다.
package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;



public class SetTest {

	public static void main(String[] args) {


	HashSet hs1 = new HashSet<>();
	//데이터 추가: add()메서드 이용
	hs1.add("DD");
	hs1.add("AA");
	hs1.add(2);
	hs1.add("CC");
	hs1.add("BB");
	hs1.add(1);
	hs1.add(3);
	
	System.out.println("set =>"+hs1);
	System.out.println("set의 개수 => "+hs1.size());
	
	//set에 중복되는 데이터를 추가하면  false를 반환하고
	//데이터는 추가되지 않는다.
	boolean isAdd = hs1.add("FF");
	System.out.println("중복 되지 않을 때 : "+ isAdd);//true
	System.out.println("set =>"+hs1);
	System.out.println();
	
	isAdd = hs1.add("CC");
	System.out.println("중복될 때 : "+ isAdd);//false
	System.out.println("set =>"+hs1);
	System.out.println();

	//Set의 데이터를 수정하려면 수정하는 명령이 따로 없기 때문에 
	// 해당 자료를 삭제한 후에 추가해 주는 방식으로 처리한다.
	
	//삭제하는 메서드 : remove(삭제할 데이터)
	//           ==> 반환값 : 삭제 성공(true), 삭제 실패(false)
	//             clear() ==> 전체 데이터 모두 삭제
	
	//"FF" 데이터를 "EE"로 변경하기
	hs1.remove("FF");
	System.out.println("삭제한 후 set => "+ hs1);
	hs1.add("EE");
	System.out.println("set => "+ hs1);
    //원본데이터를 삭제하고 추가하는 형식
	System.out.println();
	
	/*hs1.clear();
	System.out.println("전체 삭제 후 set =>"+hs1);*/
	

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

	
	Iterator it = hs1.iterator(); 
        // Set 데이터를 Iterator로 변환하기
	//데이터가 차곡차곡 쌓여 있는것
	
	//Iterator의 hasNext()메서드
	// ==> Iterator의 포인터가 가리키는 곳 다음 번째에 데이터가 있는지 검사한다. 
    (데이터가 있으면 true, 없으면 false 반환)
	while(it.hasNext()){
	//Iterator의 next()메서드
	// ==> Iterator의 포인터가 가리키는 곳 다음번째 위치로 이동한 후 그 곳의 데이터를 읽어와 반환한다.
		System.out.println(it.next());
        //포인터를 이용해서 데이터를 꺼내가는 식의 작업
	}
	System.out.println();
	
	//향상된 for문을 사용하면 Iterator를 사용한 효과를 낼 수 있다.
	for(Object data : hs1){
		System.out.println(data);
	}
	


//List는 중복이 되는지 검사하고 다시 만들었어야 함 Set은 중복 여부를
if문 사용하지 않고 간단하게 사용가능함
//예제) 우리반 학생들 중 번호를 이용하여 추첨하는 프로그램을 작성해 보자.
//번호는 1번부터 24번까지 있고, 추첨할 인원은 3명이다.
//당첨자를 출력해 보시오.
최소값부터 최대값 사이의 정수형 난수 만들기
//(int)(Math.random()*(최대값 - 최소값 + 1) + 최소값)

HashSet<Integer> testSet = new HashSet<>();

while(testSet.size() < 3){//3이 아니면 반복
	testSet.add((int)(Math.random() * (24-1+1) + 1));
 //1부터 24까지 랜덤 수 만들기 , ()조심하기
}

System.out.println("당첨자 번호 : "+ testSet);
System.out.println();

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

	ArrayList<Integer> testList = new ArrayList<>(testSet);
    //set에 있는 데이터의 갯수 만큼 자동으로 만들어짐
	System.out.println("List 데이터 출력");
	 for (int i = 0; i < testList.size(); i++) {
		System.out.println(testList.get(i));
	}
	

```
//로또번호 만들기(1 ~ 45 사이의 중복되지 않는 번호 6개 만들기)

 HashSet<Integer> lottoSet = new HashSet<>();
	 while(lottoSet.size() < 6){
		 lottoSet.add((int)(Math.random() * 45 + 1));
	 }
	    System.out.println("행운의 로또번호 : " + lottoSet);
     	}
    }
profile
신입 개발자 입니다!!!

0개의 댓글

관련 채용 정보