Set : 순서가 없는 데이터의 집합 (데이터 중복 허용 안함) - 순서 없고 중복 없는 배열, 즉 순서가 보장되지 않는 대신 중복을 허용하지 않도록 하는 프로그램에서 사용할 수 있는 자료구조.
- HashSet : 가장 빠르며 순서를 전혀 예측할 수 없음
- TreeSet : 정렬된 순서대로 보관하며 정렬 방법을 지정할 수 있음. 디폴트는 오름차순.
- LinkedHashSet : 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근 가능
public class col5 {
public static void main(String[] args) {
// Set은 집합. 순서 없고 중복 없음. 생성자가 없는 껍데기라서 바로 생성할 수 없음.
Set<Integer> intSet = new HashSet<Integer>(); // 선언 및 생성
intSet.add(3);
intSet.add(6);
intSet.add(9);
intSet.add(2);
intSet.add(5);
intSet.add(3);
intSet.add(6);
intSet.add(9);
for(Integer value: intSet){
System.out.println(value);
}
System.out.println(intSet.contains(5)); // intSet은 5를 포함하고 있니? true
System.out.println(intSet.contains(7)); // intSet은 7을 포함하고 있니? false
}
}
- 특징
- 순서가 보장되지 않는 대신 중복을 허용하지 않도록 유지할 수 있습니다.
- `Set`은 그냥 `Set`으로 쓸 수도 있지만 `HashSet`, `TreeSet` 등으로 응용하여 사용할 수 있습니다.
- `Set`는 생성자가 없는 껍데기라서 바로 생성할 수는 없습니다. (껍데기 = 인터페이스)
- 생성자가 존재하는 클래스인 `HashSet` , `TreeSet `, `LinkedHashSet `를 사용하여 `Set`를 생성해서 받을 수 있습니다.
- 기능
- 선언 : `Set<Integer> intSet` 형태로 선언합니다.
- 생성 : `new HashSet<Integer>();` 형태로 생성합니다.
- 추가 : `intSet.add({추가할 값})` 형태로 값을 맨 위에 추가합니다.
- 삭제 : `intSet.remove({삭제할 값})` 형태로 삭제할 값을 직접 지정합니다.
- 포함 확인 : `intSet.contains({포함 확인 할 값})` 형태로 해당 값이 포함되어있는지 boolean 값으로 응답받습니다.
위가 Set에 대한 전반적인 내용이다.
'순서가 없다, 순서가 보장되지 않는다'는 의미는 출력했을 때 순서를 랜덤하게 제공한다는 뜻이 아니다.
HashSet<Integer> hashIntSet = new HashSet<>();
hashIntSet.add(1);
hashIntSet.add(5);
hashIntSet.add(7);
hashIntSet.add(9);
hashIntSet.add(3);
System.out.println(hashIntSet); // [1, 3, 5, 7, 9]
1, 5, 7, 9, 3 순으로 추가했다 하더라도 출력 결과는 항상 오름차순인 [1, 3, 5, 7, 9] 이다.
ArrayList<Integer> numberList = new ArrayList<>(hashIntSet);
System.out.println(numberList);
HashSet에서 ArrayList로 형변환을 시켜도 출력 결과는 항상 [1, 3, 5, 7, 9] 이다.
정말 순서가 난잡한 배열을 만드려면 어떻게 해야할까 ? LinkedHashSet 을 사용하면 된다.
LinkedHashSet<Integer> hashIntSet = new LinkedHashSet<>();
hashIntSet.add(1);
hashIntSet.add(5);
hashIntSet.add(7);
hashIntSet.add(9);
hashIntSet.add(3);
System.out.println(hashIntSet); // [1, 5, 7, 9, 3]
ArrayList<Integer> numberList = new ArrayList<>(hashIntSet);
System.out.println(numberList); // [1, 5, 7, 9, 3]
'Java > Java 문법' 카테고리의 다른 글
scanner.next() , scanner.nextInt() , scanner.nextLine() (0) | 2024.09.23 |
---|---|
for문을 통해 Map을 순회하기 (0) | 2024.09.19 |
Java에서 난수 만들기 (0) | 2024.09.13 |
Java 문법 10 (제네릭) (0) | 2024.09.10 |
Java 문법 9 (오류 및 예외) (0) | 2024.09.09 |