Set 컬렉션 클래스
Set은 HashSet과 TreeSet이 상속받고 있습니다. 또한 List와 함께 Collection을 상속받고 있지만 List와는 다르게 저장된 값이 순서가 없으며 중복을 허용하지 않습니다.
1. 값의 저장 순서X
2. 값의 중복 저장X
Set을 상속받고 있는 컬렉션
1. HashSet<E>
2. TreeSet<E>
HashSet<E> 클래스
HashSet은 Set 컬렉션 클래스에서 가장 일반적으로 사용되고 있으며 해시 알고리즘을 사용하여 속도가 매우 빠릅니다.
이러한 HashSet 클래스는 내부적으로 HashMap 인스턴스를 이용하여 값을 저장합니다.
HashSet는 Set을 상속받고 있으므로 값의 순서가 없고 중복을 허용하지 않습니다.
package com.test03;
import java.util.HashSet;
import java.util.Set;
public class MTest01 {
// Set : 순서X, 중복X
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("1");
set.add("3");
set.add("5");
set.add("2");
set.add("4");
set.add("6");
set.add("7");
//set.add(null);
set.add("3"); // 중복이 없기때문에 3이 하나만 나옴
for ( String s : set) {
System.out.print(s + " "); // 출력된게 정렬된것처럼 보이지만 정렬된게 아니라 set이 자기 편한대로 가지고 나온값임 null값도 들어가짐
}
System.out.println();
findElement(set, "3");
deleteElement(set, "3");
}
public static void findElement(Set<String> set, String find) {
/*
for(int i = 0; i < set.size(); i++) {
set.get(i);
}
set은 순서가 없어서 가지고 올수가 없다.
*/
for(String s : set) {
if(s.equals(find)) {
System.out.println(find + " 찾았다!!");
}
}// null값이 들어가 있으면 NPE 오류 -> 아무것도 없는데(null 인데) 어떻게 비교를 하냐 하고 오류내는것임 / 즉, null값 저장은 가능하지만 사용하려고 하면 NullPointerException
}
public static void deleteElement(Set<String>set, String delete) {
for(String s : set) {
if(s.equals(delete)) {
if(set.remove(s)) {
System.out.println(delete + " 지웠다!");
break; //브레이크가 없으면 3은 중간에 지웠는데 지운 값을 출력시키려니까 에러(예외)가 발생함 이런 예외가 발생하기전에 브레이크를 사용하여 나오면 에러 안남 / Exception in thread "main" java.util.ConcurrentModificationException에러
}
}
}
}
}
해시 알고리즘(hash algorithm)
해시 알고리즘(hash algorithm)이란 해시 함수(hash function)를 사용하여 데이터를 해시 테이블(hash table)에 저장하고, 다시 그것을 검색하는 알고리즘입니다.
자바에서 해시 알고리즘을 이용한 자료 구조는 위의 그림과 같이 배열과 연결 리스트로 구현됩니다.
저장할 데이터의 키값을 해시 함수에 넣어 반환되는 값으로 배열의 인덱스를 구합니다.
그리고서 해당 인덱스에 저장된 연결 리스트에 데이터를 저장하게 됩니다.
예를 들어, 정수형 데이터를 길이가 10인 배열에 저장한다고 한다면 1,000,002를 검색하는 방법은 다음과 같을 수 있습니다.
1,000,002를 10으로 나눈 나머지가 2이므로 배열의 세 번째 요소에 연결된 연결 리스트에서 검색을 시작합니다.
매우 간략화한 예제이지만 이렇게 해시 알고리즘을 이용하면 매우 빠르게 검색 작업을 수행할 수 있습니다.
'Java 관련 > Java' 카테고리의 다른 글
[Java] 이터레이터(iterator) (0) | 2021.11.16 |
---|---|
[Java] Map Collection(맵) (0) | 2021.11.15 |
[Java] List Collection(리스트 컬렉션) (0) | 2021.11.13 |
[Java] 백터(Vector) & 향상된 for문(foreach) (0) | 2021.11.12 |
[Java] 컬렉션(Collection framework) (0) | 2021.11.11 |