봄디의 개발일지
[JAVA] Set 의 주요 메서드 정리 본문
2024.10.27 - [자바] - [JAVA] Set 총 정리 (HashSet, LinkedHashSet, TreeSet)
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 [] 로 받아서 사용할 수 있습니다.
'자바' 카테고리의 다른 글
[JAVA] valueOf() , intValue, parseInt() 정리 (0) | 2024.11.10 |
---|---|
[JAVA] Set 총 정리 (HashSet, LinkedHashSet, TreeSet) (0) | 2024.10.27 |
[JAVA] ArrayList 자주 사용하는 메소드 (List/LinkedList) (0) | 2024.10.06 |
[JAVA] 컬렉션 - List 정리 (ArrayList, LinkedList) (3) | 2024.10.06 |
[JAVA] 자바 메모리 구조 (2) | 2024.09.15 |