Set <E> 구현 클래스

5BRack·2022년 7월 6일

자바란?

목록 보기
34/42

HashSet <E> 구현 클래스

HashSet : Set + Hash 의 개념을 가진 자료구조

  • HashSet은 Set 인터페이스의 대표적인 구현 클래스이다.
  • HashSet은 객체들을 순서 없이 저장하고 동일한 객체는 중복 저장하지 않음.
  • HashSet 컬렉션도 저장용량을 동적 관리하며, 기본 생성자로 생성할 때 기본값은 16이다.
  • HashSet은 모든 데이터를 하나의 주머니에 넣어 관리하므로 입력 순서와 다르게 출력될 수 있다.

HashSet 생성방법

Set<E> set = new HashSet<E>();

Set<String> set = new HashSet<String>();
Set<String> set = new HashSet<>(); //hashset의 E타입 파라미터를 생략하면 왼쪽 set에 지정된 타입을 따라감

HashSet 의 데이터 정보 추출하기

  • add() - 데이터 추가하기
  • remove() - 데이터 삭제하기
  • is Empty() - 데이터가 비어 있는 지 여부확인
  • contains() - 매개변수로 입력된 데이터를 포함하는 지 확인
  • size() - HashSet의 크기
  • iterator() - 반복자 호출
System.out.println(hSet2.isEmpty()); //비어 있으면 true 비어있지 않으면 false

Set<String> hSet 3 = new HashSet<String>();
hSet3.add("가");
hSet3.add("나");
hSet3.add("다");
System.out.println(hSet3.contains("나")); // 문자 "나"가 포함되어 있으면 ture 아니면 false

System.out.println(hSet3.size()); // HashSet 크기

Iterator<String> iterator = hSet3.iterator();
while(iterator.hasnext()){
System.out.println(iterator.hasNext());
}

HashSet 의 중복 확인 메커니즘

  • HashSet은 데이터의 중복을 허용하지 않는다고 했다.
  1. hashcode() 가 동일한지 확인
  2. equal() 결과가 true 인지 확인
  • 1,2 단계 통과시 동일한 객체로 인식
  • 그 외는 다른 객체로 인식
  • 1단계 hashcode값이 다를 때 2단계는 검사하지 않는다

LinkedHashSet <E> 구현 클래스

LinkedHashSet : HashSet + Linked 특징을 가진 자료구조

  • HashSet에 Linked가 달린 구현 클래스

  • LinkedHashSet는 출력 순서가 항상 입력 순서와 동일한 특징을 가지고 있다.

  • 입력 순서 정보를 갖고 있지만, 중간에 데이터값을 추출하거나 특정 순서에 저장된 값을 가져오는 것은 불가능하다.

LinkedHashSet 생성방법

Set<String> linkedSet1 = new LinkedHashSet<>();

LinkedHashSet 의 데이터 정보 추출하기

  • HashSet 과 데이터 정보 추출방법은 같다.

TreeSet <E> 구현 클래스

TreeSet : Set + 크기비교 및 정렬 검색 기능이 추가된 자료구조

  • TreeSet은 공통적인 Set의 기능에 크기에 따른 정렬 및 검색 기능이 추가된 컬렉션이다.

  • TreeSet은 데이터를 입력 순서에 상관없이 크기 순으로 출력한다.

  • 두객체의 크기 비교가 필요하다

  • TreeSet 은 NavigableSet 와 SortedSet를 부모 인터페이스로 두고 있다. (정렬과 검색)

  • TreseSet 타입으로 선언하지 않고 Set 타입으로 선언시, 정렬과 검색 기능을 사용할 수 없다.

    TreeSet의 주요 메서드

System.out.println(treeSet.first()); // 2

System.out.println(treeSet.last()); // 50

System.out.println(treeSet.lower(26)); // 24

System.out.println(treeSet.higher(26)); // 28

System.out.println(treeSet.floor(26)); // 24

System.out.println(treeSet.floor(26)); // 26

System.out.println(treeSet.ceiling(25)); // 26

System.out.println(treeSet.ceiling(26)); // 26

TreeSet의 객체 생성 및 데이터 추가와 출력

TreeSet<Integer> treeSet = new TreeSet<Integer>();
for(int i = 50; i > 0; i -= 2){
	treeSet.add(i);
}
System.out.println(treeSet.toString());   //50부터 0까지 차례대로 출력

TreeSet 데이터 꺼내기

int treeSetSize = treeSet.size();
System.out.println(treeSetSize); //25

for(int i = 0; i <treeSetSize ; i++){
	System.out.println(treeSet.pollFirst() + " ");   //첫번째 값을 꺼내기 동작을 25번 반복
}

for(int i = 50; i > 0; i -= 2){
	treeSet.add(i);
}

int treeSetSize = treeSet.size();

for(int i = 0; i <treeSetSize ; i++){
	System.out.println(treeSet.pollLast() + " ");   //마지막 값을 꺼내기 동작을 25번 반복
}

TreeSet의 크기 비교 매커니즘

TreeSet에 저장되는 모든 객체는 크기 비교의 기준이 제공되어야 한다.

객체 크기 비교 제공 방법은 2가지다.

  1. java.lang.Comaprable 제네릭 인터페이스를 구현하는 것
    • int compareTo(T t)를 오버라이딩
  2. TreeSet 객체를 생성하면서 생성자 매개변수로 Comparator 객체를 제공하는것
  • int compareTo(T t)를 오버라이딩

0개의 댓글