Java ‐ 컬렉션 프레임워크(해시) - dnwls16071/Backend_Study_TIL GitHub Wiki

📚 List vs Set

  • 자료 구조에서 List와 Set은 각각 특정한 방식으로 데이터를 저장하고 관리하는 데 사용된다.
  • 리스트(List)
  • 정의 : 리스트는 요소들의 순차적인 컬렉션이다. 요소들은 특정 순서를 가지며, 같은 요소가 여러 번 나타날 수 있다. 즉, 중복을 허용하며 순서를 가지고 있다.
  • 순서 유지 : 리스트에 추가된 요소는 특정한 순서를 유지한다. 이 순서는 요소가 추가된 순서를 반영할 수 있다.
  • 중복 허용 : 리스트는 동일한 값이나 객체 중복을 허용한다.
  • 인덱스 접근 : 리스트 각 요소는 인덱스를 통해 접근할 수 있다. 이 인덱스는 보통 0부터 시작한다.

스크린샷 2025-01-16 오전 12 05 19

  • 정의 : 세트는 유일한 요소들의 컬렉션이다.
  • 유일성 : 세트에는 중복된 요소가 존재하지 않는다. 세트에 요소를 추가할 때, 이미 존재하는 요소이면 무시된다.
  • 순서 미보장 : 대부분의 세트 구현에는 요소들의 순서를 보장하지 않는다. 즉 요소를 출력할 때, 입력 순서와 다를 수 있다.
  • 빠른 검색 : 세트는 요소의 유무를 빠르게 확인할 수 있도록 최적화되어 있다. 이는 데이터 중복을 방지하고 빠른 조회를 가능하게 한다.
public class CustomSet {

	private int[] elementData = new int[10];
	private int size = 0;

	// O(N)
	public boolean add(int value) {
		if (contains(value)) {
			return false;
		}
		elementData[size++] = value;
		return true;
	}

	// O(N)
	public boolean contains(int value) {
		for (int data : elementData) {
			if (data == value) {
                return true;
            }
		}
		return false;
	}

	public int size() {
		return size;
	}

	@Override
	public String toString() {
		return "CustomSet{" +
				"elementData=" + Arrays.toString(elementData) +
				", size=" + size +
				'}';
	}
}

📚 해시 알고리즘

  • 해시 인덱스를 사용(각 인덱스별 LinkedList 버킷)

    • 데이터 저장 : O(N)
    • 데이터 조회 : O(N)
  • 해시 인덱스를 사용하면 최악의 경우(O(N))는 거의 발생하지 않는다. 배열의 크기만 적절하게 잡아준다면 대부분 O(1)에 가까운 빠른 성능을 보여줄 수 있다.