본문 바로가기

카테고리 없음

hashset, hashmap

1. hashSet

[표현법] 
Hashset<generic> 객체명= new HashSet();

2. set의 특징: 중복값을 저장하지 않는다

   1) HashSet이 값의 중복여부를 판단하는 방법

각 요소에 대하여 equals, hashCode  메서드 실행 후 둘다 true일 시 동일값으로 판단

=> HashSet의 요소로 String이 들어오면...
 String 클래스에선 equals 와 hashCode가 주소값이 아닌 문자열을 비교하도록 오버라이딩 되어있음


 * equals (boolean)==> 문자열 비교하여 같으면 true반환
   hashCode (int)==> 문자열 비교하여 같으면 , 같은 값(객체의 주소값을 해싱하여 10진수 형태로 반환값) 을 반환

 

HashSet<String> hs =new HashSet(); // 제네릭 설정
		System.out.println(hs);

  2) hashSet의 요소로 String형이 들어오면:


        
    HashSet<Student> stds = new HashSet();
		stds.add(new Student("가나", 15, 100));
		stds.add(new Student("다라", 15, 100));
		stds.add(new Student("마바", 15, 100));
		stds.add(new Student("사아", 15, 100));       
		stds.add(new Student("사아", 15, 100));
        -> stds 출력시 :  
  		HashSet클래스는 값 저장시, 동일값으로 판단되는 값들은 중복저장하지 않는데,
        위 두 줄은 다른 값으로 인지       
        동일값여부 판단 기준은 
         <1. hashcode가 일치하고, 2.equals가 true인지> 여부
        위 두 줄은 new연산자를 통해 객체를 생성하였으므로
        서로 다른 주소값을 가짐 (equals->true, hashCOde ->불일치)

        
     HashSet<String> hs =new HashSet(); // 제네릭 설정
		-> 값추가
		hs.add("안녕하세요~");
		hs.add(new String ("환영해요"));
		hs.add("환영해요"); 
        -> hs 출력시 : 위 두 줄은 중복저장 불가
           주소값이 다름에도 불구하고 같은 것으로 인식한다 
       1) String클래스에서는 hashCode, equals함수가 오버라이딩되어
        주소값이 아닌 실제 문자열을 비교함
       2) 상기 두 줄의 경우 객체 주소값은 상이 
        (윗줄은 heap영역, 아래줄은 heap 영역의 String pool의 주소값 참조)
         
       3) 따라서 중복여부 확인을 위해
          equals, hashCode()를 돌릴시 true, 일치 반환받음
          ==>같은 값으로 인지
          => 중복저장이 일어나지 않는다

   3) String외 기타Class에서 주소값이 아닌 실제 값으로 중복여부를 판단하게 하려면:

      String클래스처럼 실제 내용을 비교하도록 equals와 hashCode메서드를 오버라이딩

단축키: Alt+ Shift + s=> Generate equals and HashCode

3.hashset메소드

boolean add(E e) set에 전달된 요소를 추가함. (선택적 기능)
void clear() 해당 집합의 모든 요소를 제거함. (선택적 기능)
boolean contains(Object o) 해당 집합이 전달된 객체를 포함하고 있는지를 확인함.
boolean equals(Object o) 해당 집합과 전달된 객체가 같은지를 확인함.
boolean isEmpty() 해당 집합이 비어있는지를 확인함.
Iterator<E> iterator() 해당 집합의 반복자(iterator)를 반환함.
boolean remove(Object o) 해당 집합에서 전달된 객체를 제거함. (선택적 기능)
int size() 해당 집합의 요소의 총 개수를 반환함.
Object[] toArray() 해당 집합의 모든 요소를 Object 타입의 배열로 반환함.