Set는 List와 다르게 순서가 보장되지 않는 자료구조입니다.
HashSet는 다음과 같은 특징이 있습니다.
- 중복된 값을 허용하지 않습니다.
- 순서를 보장하지 않습니다.
- null 값을 저장할 수 있습니다.
- 내부적으로 HashMap을 사용하여 데이터를 저장합니다.
HashSet은 다음과 같은 메소드를 지원합니다. 각각의 메소드를 어떻게 사용하는지 예제와 함께 알아보겠습니다.
1. HashSet.add()
HashSet<Type>
으로 HashSet을 생성할 수 있습니다.
add() 메소드는 인자를 저장하고, 객체를 저장할 때 객체가 Set에 저장되어있지 않았다면 True를 리턴합니다. 이미 저장되어있다면 False를 리턴합니다.
public boolean add(E e)
다음은 HashSet을 생성하고 3개의 String 객체를 add하는 코드입니다. HashSet은 순서를 보장하지 않기 때문에 출력해보면 입력한 순서와 다르게 출력이 됩니다.
Set<String> fruits = new HashSet<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("kiwi");
System.out.println("fruits: " + fruits);
// fruits: [banana, apple, kiwi]
실행 결과는 코드 바로 밑에 주석으로 붙여넣었습니다.
2. HashSet.remove()
remove()는 인자로 전달된 객체를 Set에서 삭제합니다. Set에 객체가 존재하여 삭제가 되었다면 True를 리턴합니다. Set에 파일이 존재하지 않았다면 False를 리턴합니다.
public boolean remove(Object o)
다음은 HashSet에서 객체를 삭제하고 결과를 출력하는 코드입니다.
Set<String> fruits = new HashSet<String>();
fruits.add("apple");
fruits.add("banana");
fruits.add("kiwi");
System.out.println("fruits: " + fruits);
fruits.remove("apple");
System.out.println("fruits: " + fruits);
// fruits: [banana, apple, kiwi]
// fruits: [banana, kiwi]
3. HashSet.removeAll()
removeAll()은 인자로 받은 Collection에 저장된 아이템들을 HashSet에서 삭제합니다.
boolean removeAll(Collection<?> c)
다음 코드는 removeAll을 이용하여 ArrayList에 저장된 객체를 HashSet에서 삭제하는 예제입니다.
Set<String> fruits = new HashSet<String>();
fruits.add("apple");
fruits.add("banana");
fruits.add("kiwi");
System.out.println("fruits: " + fruits);
List<String> removed = new ArrayList<>();
removed.add("apple");
removed.add("kiwi");
fruits.removeAll(removed);
System.out.println("fruits: " + fruits);
// fruits: [banana, apple, kiwi]
// fruits: [banana]
4. HashSet.removeIf()
removeIf()는 인자로 람다식을 받을 수 있습니다. 함수형 인터페이스로 만들어진 객체를 받는다고 할 수 있습니다. Set의 아이템 중에 이 조건에 충족하는 객체는 삭제됩니다.
public boolean removeIf(Predicate<? super E> filter)
다음은 스트링의 길이가 4보다 큰 아이템을 삭제하는 예제입니다.
// fruits: [banana, apple, kiwi]
// fruits: [kiwi]
5. HashSet.clear()
clear()
는 HashSet의 모든 아이템들을 삭제합니다.
public void clear()
다음은 clear()
를 사용하는 예제입니다.
Set<String> fruits = new HashSet<String>();
fruits.add("apple");
fruits.add("banana");
fruits.add("kiwi");
System.out.println("fruits: " + fruits);
fruits.clear();
System.out.println("fruits: " + fruits);
// fruits: [banana, apple, kiwi]
// fruits: []
6. HashSet.contains()
contains()
는 Set 안에 객체가 존재하는지 여부를 리턴해줍니다.
public boolean contains(Object o)
다음은 contains로 HashSet 내의 객체가 존재하는지 확인하는 코드입니다.
Set<String> fruits = new HashSet<String>();
fruits.add("apple");
fruits.add("banana");
fruits.add("kiwi");
System.out.println("has apple? " + fruits.contains("apple"));
System.out.println("has grape? " + fruits.contains("grape"));
// has apple? true
// has grape? false
7. HashSet.iterator()
iterator()
는 Iterator 객체를 리턴해 줍니다. 이 객체로 Set의 모든 아이템을 순회할 수 있습니다.
public Iterator<E> iterator()
다음은 HashSet의 모든 객체를 순회하면서 출력하는 코드입니다.
Set<String> fruits = new HashSet<String>();
fruits.add("apple");
fruits.add("banana");
fruits.add("kiwi");
Iterator<String> it = fruits.iterator();
while (it.hasNext())
System.out.println("fruits: " + it.next());
// fruits: banana
// fruits: apple
// fruits: kiwi
8. for를 이용하여 요소 순회
for문을 사용하여 Set의 모든 아이템에 접근할 수도 있습니다. iterator보다 for가 좀 더 간단해보입니다.
Set<String> fruits = new HashSet<String>();
fruits.add("apple");
fruits.add("banana");
fruits.add("kiwi");
for (String fruit : fruits) {
System.out.println("fruits: " + fruit);
}
// fruits: banana
// fruits: apple
// fruits: kiwi
9. HashSet.isEmpty()
isEmpty()
는 Set에 저장된 아이템이 없으면 True를 리턴해 줍니다.
public boolean isEmpty()
다음은 isEmpty()를 사용하는 예제입니다.
Set<String> fruits = new HashSet<String>();
fruits.add("apple");
fruits.add("banana");
fruits.add("kiwi");
System.out.println("is empty? " + fruits.isEmpty());
fruits.clear();
System.out.println("is empty? " + fruits.isEmpty());
// is empty? false
// is empty? true
10. HashSet.size()
size()
는 HashSet에 저장된 아이템 개수를 리턴합니다.
public int size()
다음은 size()를 사용하는 예제입니다.
Set<String> fruits = new HashSet<String>();
fruits.add("apple");
System.out.println("size? " + fruits.size());
fruits.add("banana");
fruits.add("kiwi");
System.out.println("size? " + fruits.size());
// size? 1
// size? 3
11. 중복된 값과 null 저장
Set는 null 저장을 허용하지만, 중복된 값은 허용하지 않습니다.
다음 코드의 결과를 보면 null은 저장되지만, 중복된 값은 1개만 저장됩니다.
Set<String> fruits = new HashSet<String>();
fruits.add("apple");
fruits.add("banana");
fruits.add("kiwi");
fruits.add(null);
fruits.add("kiwi");
System.out.println("fruits: " + fruits);
// fruits: [banana, null, apple, kiwi]
참고
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기