Interface Set<E>
- Set 컬렉션은 Collection 인터페이스 중 하나로 순서를 유지하는 List 컬렉션과는 달리 Set 컬렉션은 저장 순서가 유지 되지 않는다.
- Set Collection은 객체를 중복해서 저장할 수 없고 하나의 null만 저장할 수 있다.
(Set의 가장 큰 장점은 중복을 자동으로 제거해준다는 점)
>> Set 컬렉션은 수학의 집합(순서와 상관 없고 중복이 허용되지 않음)에 비유될 수 있다. 또한 Set 컬렉션은 구슬 주머니와도 같은데, 이는 동일한 구슬을 두 개 넣을 수 없고 들어갈(저장할) 때와 나올(찾을) 때의 순서가 다를 수 있기 때문 !!!

- Set은 비선형 구조이기 때문에 순서가 없으며 인덱스도 존재하지 않는다. 그렇기 때문에 값을 추가하거나 삭제할 때에는 해당 값이 Set내부에 포함되어있는지 먼저 검색한 다음 추가나 삭제를 해야하기 때문에 List에 비해 느리다.
- Set컬렉션에는 HashSet, linkedHashSet, TreeSet 등이 있다.
- Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메소드가 없는 대신 전체 객체를 대상으로 한번씩 반복해서 가져오는 반복자(Iterator)를 제공한다.
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
set.remove("a");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
[결과 값]

- Iterator 대신 for문을 사용할 수도 있으며 결과값은 동일하다.
Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
set.remove("a");
for (String str : set) {
System.out.println(str);
}
이번 포스팅에서는 Set 컬렉션을 상속받은 HashSet<E> 에 대해 알아본다.
Class HashSet<E>
- HashSet은 Set컬렉션 클래스 중에 가장 일반적으로 사용되고 있으며 해시 알고리즘을 사용하기 때문에 속도가 매우 빠르다.
- HashSet은 Set 인터페이스의 구현 클래스이며, 아래와 같이 생성할 수 있다.
Set<E> set = new HashSet<E>();
- HashSet은 객체들을 순서없이 저장하고 동일한 객체는 중복 저장하지 않는다. HashSet이 판단하는 동일한 객첼란 꼭 같은 인스턴스를 뜻하지는 않는다.
- 만약 요소의 저장 순서를 유지해야한다면 JDK 1.4부터 제공하는 LinkedHashSet 클래스를 사용하면 된다.
- HashSet은 객체를 저장하기 전에 먼저 객체의 hashCode() 메소드를 호출해서 해시코드를 얻어낸다. 그리고 이미 저장되어 있는 객체들의 해시코드와 비교한다. 만약 동일한 해시콛가 있다면 equals() 메소드로 두 객체를 비교하고 결과값이 true가 나오면 동일한 객체로 판단하고 중복 저장하지 않는다.
자바 컬렉션 프레임워크와 List 컬렉션에 대한 내용은 아래 포스팅 참고 !!
자바컬렉션 프레임워크(Java Collection Framework) 장점 / 종류
자바 컬렉션 프레임워크란? 애플리케이션을 개발하다 보면 다수의 객체를 저장해두고 필요할 때마다 꺼내서 사용해야되는 경우가 발생하는데 이런 경우 가장 간단한 방법은 자바의 배열을 이
gmffl.tistory.com
List 컬렉션(ArrayList vs LinkedList)
List 컬렉션이란 무엇인지 알아보고 대표적 구현 클래스인 ArrayList와 LinkedList를 서로 비교하여 알아보자. Interface List : List Collection List컬렉션은 java.util 패키지에 있으며 Collection 인터페이스를 상
gmffl.tistory.com
'자바(JAVA) > 기본 문법' 카테고리의 다른 글
| 자바 ArrayList 중복 제거 방법 (0) | 2023.07.09 |
|---|---|
| Java NumberFormatException 에러(백준 문제) 해결 (0) | 2023.04.21 |
| List 컬렉션(ArrayList vs LinkedList) (0) | 2023.03.31 |
| 자바컬렉션 프레임워크(Java Collection Framework) 장점 / 종류 (0) | 2023.03.01 |
| JAVA 자바 메모리 구조(Runtime Data Area) (0) | 2023.01.28 |