25.02.28 (금) 15일차 Java

허배령·2025년 2월 28일

괴발개발 TIL

목록 보기
16/54

Set

  • 저장 순서가 유지되지 않고 중복 객체도 저장하지 못하게 하는 자료구조
  • null도 중복을 허용하지 않기 때문에 1개의 null만 저장
  • 구현 클래스로 HashSet, LinkedHashSet, TreeSet이 있음
// 객체가 같다 (동일, 동등)를 어떻게 비교할까?
	// - 동일 : 가리키고 있는 것이 같다.
	// - 동등 : 값이 같음
	
	// 동일 객체 : 메모리 주소가 같은 객체
	//			   hashCode()는 주로 이런 객체를 식별하는데 사용
	
	// 동등 객체 : 메모리 주소가 다르더라도, 각 객체의 내부 값들이 같다면
	//			   동일한 객체로 간주하는 경우를 말함
	//			   equals() 메서드는 이러한 객체가 같은지 판단할 때 사용
	
	// 동일 비교 : Object.hashCode() 메서드 오버라이딩
	@Override
	public int hashCode() {
		// 필드에 저장된 값을 이용해서 각각의 hashCode 생성
		// hashcode : 객체별 식별 코드
		return Objects.hash(age, gender, name); //ex)	홍길동 -->123451
												//		홍길동 -->123451
												//		김유리 -->363412
	}		// == : 주소를 비교
			// equals() : 값 비교
	
	// 동등 비교 : Object.equals() 메버스 오버라이딩
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		return age == other.age && gender == other.gender && Objects.equals(name, other.name);
	}

Set 계열 주요 메서드

Set은 get메서드가 없고 Iterator가 있다!
add(E e), size(), remove(Object o) 주로 사용!!

Set에 저장된 요소(객체) 꺼내는 방법

  1. Iterator(반복자) 이용
  2. List로 변환
  3. 향상된 for문 이용
Set<String> set = new HashSet<String>();

set.add("몽쉘");
set.add("꼬북칩");
set.add("쿠크다스");
set.add("빈츠");
set.add("포카칩");

1. Iterator (반복자) 이용
- 컬렉션 객체에 저장된 요소를 하나씩 순차 접근하는 객체

Iterator set.iterator()
- 현재 Set을 순차 접근할 수 있는 Iterator 객체 반환
Iterator<String> it = set.iterator();

boolean Iterator.hasNext()
- 다음 순차 접근할 요소가 있으면 true, 없으면 false
while(it.hasNext()) {
	// 다음 요소가 있으면 반복, 없으면 멈춤
    
    // Iterator.next() : 다음 요소를 꺼내와서 반환
    String temp = it.next();
    System.out.println(temp);
}
---------------------------------------------------------
2. List로 변환

List<String> list = new ArrayList<>(set);
// Set에 저장된 객체를 이용해서 List를 생성
// set안에 있는걸 list로 복사하는 느낌
//	-> 5개 과자들을 list로
Set -> List로 변환 과정
1)List를 객체 생성
2) addAll() 메서드나 생성자 등을 이용해서 Set의 요소들을 List에 추가
3) 변환 완료

// 일반 for문
for(int i = 0; i < list.size(); i++) {
	System.out.println(list.get(i));
  }
-----------------------------------------------------------
3. 향상된 forfor(String snack : set) {
	System.out.println(snack);
 }


HashSet

  • Set에 객체를 저장할 때 hash함수를 사용하여 처리 속도가 빠름
  • 마구잡이 정렬
  • 동일 객체 뿐 아니라 동등 객체도 중복하여 저장하지 않음
    동일 : 가리키고 있는 것이 같다. (참조하는 메모리 주소가 같다)
    동등 : 값이 같다. (메모리 주소가 다르더라도 객체의 내부 값들이 같다)

    123 -> qwerty
    asdjklakldfhjawe -> asdfgh

LinkedHashSet

  • HashSet과 거의 동일하지만, Set에 추가되는 순서를 유지한다는 점이 다름
  • 입력한 순으로 정렬

TreeSet과 TreeMap

  • 검색 기능을 강화시킨 컬렉션
  • 이진 트리 자료구조
  • 중복 저장은 허용하지 않지만, 자동 정렬은 허용
  • 가나다 정렬

TreeSet

  • 이진 트리를 기반으로 한 Set컬렉션으로, 왼쪽과 오른쪽 자식 노드를 참조하기 위한 두 개의 변수로 구성
profile
인생은 변수

0개의 댓글