Java/Java Concept
[Java] TreeSet<E>
군우
2018. 3. 13. 14:08
TreeSet<E> 클래스
- 트리라는 자료구조를 기반으로 데이터를 저장한다
- 데이터를 정렬된 순서로 저장함
- HashSet<E> 와 마찬가지로 데이터 중복저장 않는다
- 정렬의 기준은 프로그래머가 직접 정의한다.
값을 참조할때는 iterater로 참조함으로 저장의 순서는 상관이 없다
기준은 compareTo에서 오버라이딩해야함
iterator메소드는 오름차순을 보장한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package framework22; import java.util.Iterator; import java.util.TreeSet; public class SortTreeSet { public static void main(String[] args){ TreeSet<Integer> tr = new TreeSet<Integer>(); tr.add(3); tr.add(2); tr.add(1); tr.add(5); tr.add(1); Iterator<Integer> itr = tr.iterator(); while (itr.hasNext()) { System.out.println(itr.next()); } } } | cs |
출력 할때는
Iterator<Integer> itr = tr.iterator(); 을 사용한다.
아이터레터는 처음부터 접근한다.
1 2 3 4 5 | //출력화면 1 2 3 5 | cs |
//
오름차순 내림차순 정렬을 하는데, 항상 같은자료형 하나만있는 것이 아니다
그래서 그 정렬의 기준을 프로그래머가 직접해줘야하는데
새로 만든 클래스는 name 스트링 값과 age나이인 인트값을 가지고 있는
Person 클래스를 만들었다.
Person 클래스는 Comparable<Person> 을 implements하고 있고
compareTo 메소드를 오버라이딩하여 비교의 설정을 직접하고 있다.
또 메인에서 대상을 넣을때 tr.add()를 사용하는데 그 매개변수는
new Person("a",3); 새로운 인스턴스의 생성자를 통해 생성하고 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package framework22; import java.util.Iterator; import java.util.TreeSet; public class PracTreeSet { public static void main(String[] args) { TreeSet<Person> tr = new TreeSet<Person>(); // 여기도 틀림 Integer 클래스형이 아니고 Person형 으로 바꿔야함. /* // 만드는게 이렇게 만드는게 아니고 , Person p1 = new Person("kim", 30); Person p2 = new Person("gk", 26); */ tr.add(new Person("Lee", 22)); tr.add(new Person("Kim", 26)); tr.add(new Person("jung", 21)); Iterator<Person> itr = tr.iterator(); while(itr.hasNext()) System.out.println(itr.next()); } } | 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 34 35 36 37 38 39 40 41 42 43 44 | package framework22; import java.util.HashSet; import java.util.Iterator; public class Person implements Comparable<Person> { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return name+"("+age+"세)"; } public int hashCode() { return age%3; } public boolean equals(Object obj) { Person per = (Person)obj; if(per.name == name){ if(per.age ==age){ return true; } else {return false; } } else{ return false; } } @Override public int compareTo(Person p) { // TODO Auto-generated method stub if(age > p.age){ return 1; } else if(age< p.age){ return -1; } else{ return 0; } } } | cs |
//출력화면
1 2 3 | jung(21세) Lee(22세) Kim(26세) | cs |