22일차 강의 정리


set type은 중복이 불가능하다.

우선 해시값을 비교해서 중복이 아님을 확인해 제외시킨다. 

그러나 해시값이 같을 경우 equals검사 수행해서 중복을 확인한다.

1. HashSet

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public static void main(String[] args) {
        HashSet set = new HashSet();
        set.add("하나");
        set.add("둘");
        set.add("셋");
        set.add("넷");
        set.add(new String("넷"));        //중복x
        
        HashSet set2 = new HashSet(set);    //set을 set2에 모두 복사
        HashSet set3 = (HashSet)set2.clone();    //복사,그러나 clone이 받아오는 타입을몰라서 (HachSet)로 캐스팅
        
        Iterator ite = set3.iterator();
        while(ite.hasNext()){
            System.out.println(ite.next());
//            ite.remove();    //삭제
        }
        System.out.println("------------------------------");
        System.out.println("size: "+set3.size());
        System.out.println("\'하나\'란 값이 있는가? "+set3.contains("하나"));
        System.out.println("하나".equals(new String("하나")));    //==는 비교불가
        System.out.println(new String("하나").hashCode());
        System.out.println("하나".hashCode());
    }//main end
cs

결과

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Pm05{
    int idx;
    
    Pm05(int idx){
        this.idx=idx;
    }
    
    public boolean equals(Object obj){
        return idx==((Pm05)obj).idx;
    }
    
    public int hashCode(){
        return 1000;
    }
}
 
public class Ex05 {
    public static void main(String[] args) {
        HashSet set = new HashSet();
        Pm05 pm1 = new Pm05(1);
        Pm05 pm2 = new Pm05(2);
        Pm05 pm3 = new Pm05(1);
        set.add(pm1);
        set.add(pm2);
        set.add(pm3);
        
        Iterator ite = set.iterator();
        while(ite.hasNext()){
            System.out.println(ite.next());
        }
        System.out.println("size: "+set.size());
    }//main end
}//class end
cs

중복되는것을 확인해서 제외시켜서 size가 2이다.

결과

응용소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Ball{
        int num;
        
        Ball(int num){
            this.num=num;
        }
        @Override
        public boolean equals(Object obj){
            return num==((Ball)obj).num;
        }
        @Override
        public int hashCode(){
            return num;
        }
    }
 
public class Ex06 {
    public static void main(String[] args) {
        //lotto
        HashSet set = new HashSet();
        int cnt = 0;
        while(set.size()<7){
            cnt++;
            Random ran = new Random();
            int random = ran.nextInt(45)+1;
            set.add(new Ball(random));
        }
        System.out.println(cnt-6+"번 중복");
        Iterator ite = set.iterator();
        while(ite.hasNext()){
            Ball ball = (Ball)ite.next();
            System.out.print(ball.num+" ");
        }
        
    }//main end
}//class end
cs

결과1                                결과2


2. TreeSet

TreeSet은 위의 HashSet과 달리 Tree형식으로 순서가 존재한다.

그래서 순서를 정할수 없는 상황(ex. 문자와 숫자가 혼용)이 된다면 오류가 발생한다.

소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Pm07 implements Comparable{
    int idx;
    Pm07(int idx){
        this.idx=idx;
    }
    @Override    // 트리구조의 정렬 
    public int compareTo(Object o) {
        if(idx==((Pm07)o).idx){
            return 0;
        }
        if(idx<((Pm07)o).idx){
            return -1;
        }
        return 1;
    }
}
 
public class Ex07 {
 
    public static void main(String[] args) {
        TreeSet set = new TreeSet();
        set.add(new Pm07(1));
        set.add(new Pm07(50));
        set.add(new Pm07(5));
        set.add(new Pm07(25));
        
        Iterator ite = set.iterator();
        while(ite.hasNext()){
            System.out.println(((Pm07)ite.next()).idx);
        }
        System.out.println("----------------------");
//        System.out.println(set.first());
//        System.out.println(set.last());
//        System.out.println(set.lower(new Integer(10)));
//        System.out.println(set.higher(10));
    }
 
}
cs

결과


'* Programming > JAVA' 카테고리의 다른 글

DAY22 큐&스택  (0) 2016.08.04
DAY22 컬렉션프레임워크 Map  (0) 2016.08.03
DAY22 컬렉션프레임워크 ArrayList&LinkedList  (0) 2016.08.03
DAY22 컬렉션프레임워크 Vector  (0) 2016.08.03
DAY21 컬렉션 프레임워크  (0) 2016.08.03

+ Recent posts