Search

반응형

'자바컬렉션'에 해당되는 글 1건

  1. 2020.05.12 [자바/java]컬렉션에서 Set 은 어떻게 사용할까요? Collection/Set
반응형

안녕하세요.

신기한 연구소 개발자 티보이입니다.

컬렉션(Collection) 중 Set에 대해 살펴봅니다.

프로그램을 개발할 때 반드시 알아야 할 인터페이스 중 하나입니다.

제대로 알고 쓰면 더 좋겠지요?

컬렉션인지 모르고 그냥 다른 개발자 선배들이 소스에 사용한 것을 내 생각과 비슷하게 나오니깐 어떤 기능이 있고 성능은 어떤지 고민하지 않고 사용했던 기억이 있네요.

그러다 보면 가끔 난해한 오류가 나는데 이해를 못하고 찾지도 못하고 고생했던 경험들 있을 겁니다.

Vector, ArrayList, HashMap, Hashtable 등 소스에서 자주 만났던 클래스들인데..

잘 이해하고 사용한다면 기능, 성능면에서 많은 도움이 될 거예요.

간단하게 사용하면 되는 것을 굳이 무거운 컬렉션을 사용할 필요가 없잖아요.

쉰나게 만들었는데 막상 필요한 메서드를 해당 클래스가 지원하지 않는다면다른 클래스 찾아서 다시 코딩해야 하고요.

여하튼 카피 앤 페이스트(Copy & Paste)도 잘하면 좋지만 잘 알고 한다면 더 편하게 사용하고

소스 품질도 좋아질 것이며

당연히 우리의 스킬도 업 될 것입니다.

 

이제 같이 컬렉션 Set 인터페이스를 만나러 떠나 봅시다~

렛츠 고!!

 

 

SetCollection(컬렉션)의 특별한 종류이며 SortedSetSet의 특별한 종류입니다.

대표적으로 HashSet, LinkedSet, TreeSet 세가지가 있어요.

그 중 HashSet을 가장 많이 사용합니다.

Set중복된 요소를 저장하지 않는 컬렉션 중 하나입니다.

컬렉션(Collection)의 추상 메서드만 사용합니다.

즉, Set은 따로 메서드를 갖고 있지 않고 Collection것만 사용한다는 의미입니다.

순서(index)가 없어요. , get(int index) 메서드를 사용할 수 없습니다.

toString()으로 전체를 뽑던지, iterator를 사용해서 for문으로 쭉 뽑던지, 아니면 toArray() 배열로 따로 배열에 담아서 사용하면 됩니다.

 

HashSet해시 테이블에 요소들을 저장하며, 최고 성능으로 구현하는 것입니다.

TreeSet은 자료구조의 red-black로 그 요소를 저장하는데 속도는 HashSet보다 느립니다.

 

예제를 통해서 사용법을 익혀봅니다.

#HashSet과 toArray() 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HashSet<Integer> hs = new HashSet<Integer>();
 
Random rm = new Random();
        
        
for(int i=0;i<10;i++) {
    hs.add(rm.nextInt(10));
}
        
        
Integer[] array = hs.toArray(new Integer[hs.size()]);
 
for(Integer itm : array) {
    System.out.println(itm);
}
cs

 Random을 사용해서 10 이하 임의의 수를 10개를 add()를 통해 HashSet hs에 담았습니다.

그리고 Integer [] array 로 배열을 생성하는데,

toArray() 를 사용해서 배열로 받습니다.

for-each문으로 출력문을 만들면 해당 HashSet을 배열로 받은 값들이 술술 나옵니다.

 

#HashSet과 addAll() 활용

1
2
3
4
5
HashSet<Integer> hs = new HashSet<Integer>();
HashSet<Integer> hs3 = new HashSet<Integer>();
 
 
hs3.addAll(hs);
cs

이 예문은 HashSet hs3에 HashSet hs 의 요소들을 추가하는 기능입니다.

중요한 것은 중복 허용이 안되기에 중복하지 않는 요소들만 합쳐집니다.

hs = [3,4]

hs3 = [0.1.2.3] 이면

addAll 후 hs3 = [0,1,2,3,4]가 됩니다. 3은 중복되니 하나만 들어갑니다.

 

#HashSet과 containsAll() 활용

1
2
3
4
5
6
7
8
9
10
11
12
HashSet<Integer> hs = new HashSet<Integer>();
HashSet<Integer> hs3 = new HashSet<Integer>();
 
hs.add(2);
hs.add(3);
 
hs3.add(0);
hs3.add(1);
hs3.add(2);
hs3.add(3);
 
System.out.println(hs3.containsAll(hs));
cs

hs3에 hs 전체가 포함되어 있으면 true 아니면 false를 반환합니다.

일부만 포함되면 false입니다.

#HashSet과 retainAll() 활용

1
2
3
4
5
6
7
8
9
10
11
12
HashSet<Integer> hs = new HashSet<Integer>();
HashSet<Integer> hs3 = new HashSet<Integer>();
 
hs.add(2);
hs.add(3);
 
hs3.add(0);
hs3.add(1);
hs3.add(2);
hs3.add(3);
 
System.out.println(hs3.retainAll(hs));
cs

이 소스를 실행하면 hs가 가지고 있는 [2,3] 이 hs3에도 전부 있습니다.

retainAll을 실행하면 hs3는 hs를 전부 포함하고 있다면 그 부분만 남기게 됩니다.

hs3dl [0.1.2.3]에서 [2,3]으로 바뀌게 됩니다.

 

#HashSet과 removeAll() 활용

1
2
3
4
5
6
7
8
9
10
11
12
HashSet<Integer> hs = new HashSet<Integer>();
HashSet<Integer> hs3 = new HashSet<Integer>();
 
hs.add(2);
hs.add(3);
 
hs3.add(0);
hs3.add(1);
hs3.add(2);
hs3.add(3);
 
System.out.println(hs3.removeAll(hs));
cs

removeAll을 실행하면 hs3의 목록에서 hs 목록이 빠지게 됩니다.

위 결과는 hs3 = [0,1]이 됩니다.

컬렉션(Collection) 중 Set에서 자주 사용하는 HashSet에 대해 살펴봤습니다.

즐 코딩하세요~

반응형