23.05.22 JAVA

천용·2023년 5월 22일
0

고급 JAVA

목록 보기
2/3

Set

  • 데이터의 인덱스정보가 없고, 중복을 허용하지 않는다.
    그래서 이미 있는 데이터를 add하면 false를 반환하고, 데이터는 추가되지 않는다.
  • 데이터를 수정하려면 수정하는 명령이 따로 없기 때문에 해당자료를 삭제한 후 새로운 데이터를 추가해 주어야한다.
  • 삭제처리하기 위한 메서드
    1) clear() -> Set 데이터 전체 삭제
    2) remove(삭제할 자료) -> 해당 자료 삭제
  • 데이터의 인덱스 정보 (개념)이 없기 때문에 List처럼 인덱스로 데이터를 하나씩 불러올 수 없다.
    그래서 데이터를 하나씩 얻기 위해서는 Iterator 객체를 이용하여 처리한다.
    Iterator it = hs.iterator();
  • Set(집합개념)이기 때문에 중복이 제거된다

hasNext() -> 포인터가 다음 위치에 있으면 true, 없으면 false를 반환한다.

next() -> 포인터를 다음 위치로 이용하고, 이동한 위치의 데이터를 반환한다.

Collection유형의 객체들은 서로 다른 자료구조로 쉽게 변경해서 사용할 수 있다.
다른 종류의 객체 를 생성할 때 생성자에 변경할 데이터를 넣어주면 된다.

TreeSet

  • 자동정렬 기능이 포함되어 있다.
  • 저장된 자료 중 특정한 자료보다 작은 자료를 찾아서 SortedSet형으로 반환하는 메서드가 있다.

headSet(기준값) : 기본적으로 '기준값'은 포함시키지 않는다.
headSet(기준값, 논리값) : 논리값이 true이면 '기준값'을 포함시킨다.

tailSet(기준값) : 기본적으로 '기준값'은 포함시킨다.
tailSet(기준값, 논리값) : 논리값이 false 이면 '기준값'을 포함시키지 않는다.

subSet(기준값1, 기준값2) : 기준값1 ~ 기준값2 사이의 값을 가져온다. (기준값1 포함 , 기준값2 미포함)
subSet(기준값1, 논리값1, 기준값2, 논리값2) : 각 기준값을 포함할 지의 여부를 설정한다.

해시함수(hash function)

  • 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다.
  • 해시함수에 의해 얻어지는 값은 해시값, 해시코드, 해시체크섬 또는 간단하게 해시라고 부른다.
  • hashSet, HashMap, Hashtable 같은 객체들을 사용할 경우 객체가 서로 같은지를 비교하기 위해 equals()메서드와 hashCode()메서드를 호출한다. 그래서 객체가 서로 같은지 여부를 결정하려면 두 메서드를 적절히 재정의 해주어야 한다. 객체가 같은지 여부는 데이터를 추가할 때 검사한다.
  • equals()와 hashCode()메서드에 관련된 규칙
    1. 두 객체가 같으면 반드시 같은 해시코드를 가져야 한다.
    2. 두 객체가 같은면equals()메서드를 호출했을때 true를 반환해야한다. 즉, 객체 a, b가 같다면 a.equals(b)와 b.equals(a) 둘 다 true 이여야한다.
    3. 두 객체의 해시값이 같다고 해서 두 객체가 반드시 같은 객체는 아니다. 하지만, 두 객체가 같으면 반드시 해시값이 같아야 한다.
    4. equals()를 재정의하면 반드시 hashCode()도 재정의 해주어야 한다.
    5. hashCode()는 기본적으로 힙메모리에 존재하는 각 객체에 대한 메모리 주소매핑정보를 기반으로 한 정수값을 반환한다. 그러므로, 해당 클래스에서 재정의 하지 않으면 절대로 해당 객체는 같은 객체로 간주될 수 없다(해시코드가 다르기 때문에)
  • hashCode()에서 사용하는 '해싱 알고리즘'에서 서로 다른 객체에 대해서 같은 hashCode값을 만들어 낼 수 있다. 그래서 객체가 같지 않더라도 hashCode가 같을 수 있다.
  • 해쉬함수 검색속도가 엄청 빠르다. 메모리를 많이 확보해야 한다.

return new Integer(mem1.getNum()).compareTo(mem2.getNum()) * -1;
앞에만 인티져가 있다. 뒤에도 사실 있지만 생략된것..

	
profile
성장하는 개발자가 되자

0개의 댓글