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 |