본문 바로가기
Language/Java

자바 Set 사용법부터 출력까지

by wakestand 2019. 11. 27.
반응형

일단 자바의 Set을 알아보기에 앞서서

List를 알아두면 참 좋은데

List에 대해서는 아래 글을 참고해주면 된다

 

자바 List 정의부터 출력까지

List는 자바의 자료형 중 하나로 배열과 비슷하지만 결정적으로 다른 점은 1. 크기를 자유롭게 설정 가능 - 배열은 처음 크기를 설정하고 나서부터는 크기 설정이 불가능하지만 리스트는 삽입과 삭제로 원하는대로..

wakestand.tistory.com

Set을 List와 비교해보자면

1. Set은 중복 값을 삽입할 수 없다

2. Set은 특정한 순서를 가지고 있지 않다

 

이제 예제를 통해 한번 알아보자

 

String 타입만 받는 HashSet을 선언한 뒤

set 안에 add 메소드를 사용해서 "a", "b", "b", "d"

총 4개의 값을 set 안에 넣었는데

 

set은 중복값을 허용하지 않기 때문에

b를 1번 넣건 200번 넣건

동일한 값은 하나만 들어가게 된다

 

또한 삽입 시 순서가 없기 때문에

배열(Array)이나 List 처럼

.get(인덱스)로 값을 가져올 수 없고

 

Iterator를 통해 가져와야 하는데

set.iterator()로 set 값을 iterator에 담은 후

.next를 통해 하나씩 뽑아내는 식이다

 

여기서 순서가 없다고 했는데

100% 보장하지 않을 뿐

대부분의 경우에는 넣은 값의

hashCode값에 따라 순서가 정해져 나오게 된다

 

 

자바 set 정렬 기준 및 예제

자바에서 set에 대해 배울 때 set은 정렬 순서가 없으며 무작위로 호출되기 때문에 순서를 가지게 하고 싶으면 LinkedHashSet을 사용하라는 식으로 많이 배웠을텐데 실제 set에 값을 넣고 iterator로 값을 꺼내보..

wakestand.tistory.com

Set 선언방법과 주요 메소드는 다음과 같다

 

Set 선언하기 (LinkedHashSet, TreeSet으로도 가능)

HashSet<데이터타입> set명 = new HashSet<데이터타입>();

 

Set에 값 추가하기

set명.add("값");

 

Set 크기 확인하기

set명.size();

 

Set 내용 출력할 수 있게 Iterator 안에 담기

Iterator<데이터타입> iterator명 = set명.Iterator();

 

Iterator 안에 담은 set 출력하기

Iterator명.next();

or

while(iterator명.hasNext()) {

iterator명.next(); // 값 없을때까지 계속 출력

}

 

주로 사용되는 Set은 HashSet 말고도

LinkedHashSet, TreeSet이 있는데 특징은 다음과 같다

 

LinkedSet

- 다른 Set들과 동일하게 중복은 허용하지 않으나

.add() 한 순서대로 값이 저장된다

 

TreeSet

- 오름차순으로 값을 정렬해 가지고 있으며

다른 set보다 대량의 데이터를 검색할 시 훨씬 빠르다

 

마지막으로 예제에 사용한 코드는 아래와 같다

 

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

public class SetTest {
	
	public static void main(String[] args) {
		HashSet<String> set = new HashSet<String>(); // set 선언
		
		set.add("a");
		set.add("b");
		set.add("b"); // set에 중복값 저장 불가 
		set.add("c"); // set에 값 담기
		
		System.out.println("set 크기 확인 : " + set.size());
		
		Iterator<String> iter = set.iterator(); // set을 Iterator 안에 담기
		while(iter.hasNext()) { // iterator에 다음 값이 있다면
			System.out.println("iterator : " + iter.next()); // iter에서 값 꺼내기
		}
	}

}
반응형

댓글