Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

봄디의 개발일지

[JAVA] Set 의 주요 메서드 정리 본문

자바

[JAVA] Set 의 주요 메서드 정리

bomdy 2024. 10. 27. 14:32

2024.10.27 - [자바] - [JAVA] Set 총 정리 (HashSet, LinkedHashSet, TreeSet)

 

[JAVA] Set 총 정리 (HashSet, LinkedHashSet, TreeSet)

1️⃣ Set 이란?Set 은 집합이라는 의미로 유일한 요소의 컬렉션을 말합니다. Set 의 특징으로는 유일성, 순서 미보장, 빠른 검색 등이 있습니다.  유일성 : Set 에는 중복된 요소가 존재하지 않습니

bomdy.tistory.com

 

 

Set 의 주요 메서드를 설명할 때 구현 클래스는 HashSet 으로 설명하겠습니다. 

HashSet 에 대한 설명은 이 전 블로그를 확인해주세요. 

 

1️⃣ Set 의 주요 메서드 정리

메서드 설명
add (E e) 지정된 요소를 Set 에 추가한다. (이미 존재하는 경우는 추가X)
addAll(Collection<? extends E> c 지정된 컬렉션의 모든 요소를 Set 에 추가한다. 
contains (Object o) Set 이 지정된 요소를 포함하고 있는지 여부를 반환한다. 
containsAll (Collection<?> c) Set 이 지정된 컬렉션의 모든 요소를 포함하고 있는지 여부를 반환한다. 
remove (Object o)

지정된 요소를 Set 에서 제거한다. 
removeAll (Collection<?> c) 지정된 컬렉션에 포함된 요소를 Set 에서 모두 제거한다. 
retainAll (Collection<?> c) 지정된 컬렉션에 포함된 요소만을 유지하고 나머지 요소는 Set 에서 제거한다. 
clear() Set 에서 모든 요소를 제거한다. 
size() Set 에 있는 요소의 수를 반환한다. 
isEmpty() Set 이 비어 있는지 여부를 반환한다. 
iterator() Set 의 요소에 대한 반복자를 반환한다.  
toArray() Set 의 모든 요소를 배열로 반환한다.

 

add (E e) - 지정된 요소를 Set 에 추가

Set<String> hashSet = new HashSet<>();
hashSet.add("java");
hashSet.add("spring");
hashSet.add("set");
hashSet.add("java"); //중복된 값이면 추가되지 않음
System.out.println(hashSet); // [spring, java, set]

 

add (E e) 는 지정된 요소를 추가하는 메소드입니다. 

Set 은 중복된 값을 허용하지 않기 때문에 "java" 는 한 번만 추가된 것을 확인할 수 있으며,

HashSet 은 순서를 보장하지 않기 때문에 [spring, java, set] 으로 나온 것을 확인할 수 있습니다.   

 

✅  addAll(Collection<? extends E> c - 모든 요소를 Set에 추가

Set<Integer> set1 = new HashSet<>(List.of(1,2,3,4,5)); //[1, 2, 3, 4, 5]
Set<Integer> set2 = new HashSet<>(List.of(3,4,5,6,7)); //[3, 4, 5, 6, 7]
set1.addAll(set2);
System.out.println(set1); //[1, 2, 3, 4, 5, 6, 7]

 

HashSet 의 생성자의 매개변수에는 초기용량 또는 다른 컬렉션만 들어갈 수 있습니다.

따라서 List.of() 를 사용해서 컬렉션으로 바꿔주면 set1 에 값이 들어가게 됩니다.

set1 에는 [1, 2, 3, 4, 5] 의 값이 들어가게 되고, set2 에는 [3, 4, 5, 6, 7] 이 들어가게 됩니다. (순서를 보장하지 않음)

set1.addAll() 메소드를 통해서 set2 에 있는 값을 set1 에 전부 추가하게 됩니다. 

 

Set 은 중복을 허용하지 않으므로 set1 과 set2 의 공통된 값인 3, 4, 5 는 이미 set1 에 값이 있으므로 추가되지 않습니다.

따라서 addAll() 메소드를 실행한 후 set1을 출력해보면 [1, 2, 3, 4, 5, 6, 7] 의 값이 나오게 됩니다. (순서 보장 X)

 

✅  contains (Object o) - 지정된 요소를 포함하고 있는지를 반환

Set<Integer> set1 = new HashSet<>(List.of(1,2,3,4,5)); //[1, 2, 3, 4, 5]
Set<Integer> set2 = new HashSet<>(List.of(3,4,5,6,7)); //[3, 4, 5, 6, 7]
boolean set1Contains = set1.contains(2);
boolean set2Contains = set2.contains(2);

System.out.println(set1Contains); // true
System.out.println(set2Contains); //false

 

contains() 는 지정된 요소를 포함하고 있는 지를 반환하는 메소드입니다.

set1 은 2 의 값을 포함하고 있기 때문에 true 가 반환되고, set2 는 2 의 값을 포함하고 있지 않기 때문에 false 를 반환합니다. 

 

✅  containsAll (Collection<?> c) - 컬렉션의 모든 요소를 포함하고 있는지를 반환

Set<Integer> set1 = new HashSet<>(List.of(1, 2, 3, 4, 5, 6, 7)); //[1, 2, 3, 4, 5, 6, 7]
Set<Integer> set2 = new HashSet<>(List.of(2, 3, 4)); //[2, 3, 4]
Set<Integer> set3 = new HashSet<>(List.of(6, 7, 8)); //[6, 7, 8]
boolean result1 = set1.containsAll(set2);
boolean result2 = set1.containsAll(set3);

System.out.println(result1); // true
System.out.println(result2); // false

 

 

set1 은 [1, 2, 3, 4, 5, 6, 7] 값을 가지고 있고, set2 는 [2, 3, 4] , set3 은 [6, 7, 8] 값을 가지고 있습니다. 

containsAll() 메소드는 모든 요소를 포함하고 있는 지를 확인하는 메소드 이므로

set2 의 값은 전부 set1 에 있고, set3 의 값 중 8이 set1 에 없으므로

출력을 해보면 true 와 false 의 결과가 나오는 것을 확인할 수 있습니다. 

 

remove (Object o) -  지정된 요소를 Set 에서 제거

Set<Integer> set1 = new HashSet<>(List.of(1, 2, 3, 4, 5, 6, 7)); //[1, 2, 3, 4, 5, 6, 7]
set1.remove(2);
set1.remove(6);
System.out.println(set1); // [1, 3, 4, 5, 7]

 

set1 에서 remove() 메소드를 통해서 2 와 6의 값을 제거하였습니다.

따라서 set1 에는 [1, 3, 4, 5, 7] 의 값만 남게됩니다. 

 

removeAll (Collection<?> c) - 컬렉션에 포함된 모든 요소를 Set 에서 제거

Set<Integer> set1 = new HashSet<>(List.of(1, 2, 3, 4, 5, 6, 7)); //[1, 2, 3, 4, 5, 6, 7]
Set<Integer> set2 = new HashSet<>(List.of(3, 4, 5)); //[3, 4, 5]
set1.removeAll(set2);
System.out.println(set1); // [1, 2, 6, 7]

 

set1 에는 [1, 2, 3, 4, 5, 6, 7] 값이 있고, set2 에는 [3, 4, 5] 값이 있을 때

removeAll() 메소드를 통해서 set1 에서 set2 에 있는 모든 요소를 제거하면 set1 에는 [1, 2, 6, 7] 만 남게됩니다.

 

retainAll (Collection<?> c) -  지정된 컬렉션에 포함된 요소만 남겨두고 나머지는 제거

Set<Integer> set1 = new HashSet<>(List.of(1, 2, 3, 4, 5, 6, 7)); //[1, 2, 3, 4, 5, 6, 7]
Set<Integer> set2 = new HashSet<>(List.of(6, 7, 8)); //[6, 7, 8]
set1.retainAll(set2);
System.out.println(set1); // [6, 7]
System.out.println(set2); // [6, 7, 8]

 

set1 에는 [1, 2, 3, 4, 5, 6, 7] 이 있고, set2 에는 [6, 7, 8] 이 있을 때 retainAll() 메소드는 중복된 값만 남겨두기 때문에

set1 과 set2 의 겹치는 값인 6, 7 만 남겨두고 나머지 값들은 set1 에서 모두 제거합니다. 

따라서 set1 에는 [6, 7] 만 남게되고 set2 는 기존의 값인 [6, 7, 8] 이 있게 됩니다. (set2 는 변화없음)

 

clear() -  Set 에서 모든 요소 제거 / size() - Set 에 있는 요소의 수 반환

Set<Integer> set1 = new HashSet<>(List.of(1, 2, 3, 4, 5, 6, 7)); //[1, 2, 3, 4, 5, 6, 7]
Set<Integer> set2 = new HashSet<>(List.of(6, 7, 8)); //[6, 7, 8]
System.out.println(set1.size()); // 7
System.out.println(set2.size()); // 3
set1.clear();
System.out.println(set1.size()); // 0

 

set1 은 7개의 요소를 가지고 있고, set2 는 3개의 요소를 가지고 있으므로 size() 메소드를 호출하면 7와 3이 나옵니다.

이후에 set1.clear() 를 하게 되면 모든 요소가 제거되어 set1 의 size 는 0이 됩니다.

 

isEmpty() - Set 이 비어있는 지 여부를 반환

Set<Integer> set1 = new HashSet<>(List.of(1, 2, 3)); //[1, 2, 3]
Set<Integer> set2 = new HashSet<>(List.of(6, 7, 8)); //[6, 7, 8]
set1.clear();
System.out.println(set1.isEmpty()); //true
System.out.println(set2.isEmpty()); //false

 

set1 을 clear() 하고 isEmpty() 메소드를 호출하면 set1 에는 요소가 없으므로 true 를 반환하고

set2 에는 요소가 존재하므로 false 를 반환합니다. 

 

iterator() - Set 의 요소에 대한 반복자를 반환

Set<Integer> set1 = new HashSet<>(List.of(1, 2, 3)); //[1, 2, 3]
Iterator<Integer> iterator = set1.iterator();
while (iterator.hasNext()) {
    System.out.print(iterator.next() + " "); // 1 2 3
}

 

set1 에는 [1, 2, 3] 이 들어있고 set1.iterator() 메소드를 통해서 set1 에 있는 요소들을 출력할 수 있습니다. 

 

toArray() - Set 의 모든 요소를 배열로 반환

Set<Integer> set1 = new HashSet<>(List.of(1, 2, 3)); //[1, 2, 3]
Set<String> set2 = new HashSet<>(List.of("java", "spring", "algorithm"));
Object[] arr = set1.toArray();
System.out.println(Arrays.toString(arr)); // [1, 2, 3]

String[] arr2 = set2.toArray(new String[0]);
System.out.println(Arrays.toString(arr2)); //[spring, java, algorithm]

 

toArray() 메소드를 통해서 배열로 반환하는 경우 배열의 타입을 명시하지 않으면 Object [] 로 반환됩니다. 

set1.toArray() 는 배열의 타입을 명시하지 않았기 때문에 Object [] 로 반환된 것을 확인할 수 있고, 

set2.toArray() 는 new String[0] 으로 배열의 타입을 String 으로 명시했기 때문에 String [] 로 받아서 사용할 수 있습니다.