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