JAVA chapter15. 컬렉션 프레임워크


15.5 검색 기능을 강화시킨 컬렉션

15.5.1 이진 트리 구조



15.5.2 TreeSet


리턴 타입

메소드

설명

E

first()

제일 낮은 객체를 리턴

E

last()

제일 높은 객체를 리턴

E

lower(E e)

주어진 객체보다 바로 아래 객체를 리턴

E

higher(E e)

주어진 객체보다 바로 위 객체를 리턴

E

floor(E e)

주어진 객체와 동등한 객체가 있으면 리턴만약 없다면 주어진 객체의 바로 아래의 객체를 리턴

E

ceiling(E e)

주어진 객체와 동등한 객체가 있으면 리턴만약 없다면 주어진 객체의 바로 위의 객체를 리턴

E

pollFirst()

제일 낮은 객체를 꺼내오고 컬렉션에서 제거함

E

pollLast()

제일 높은 객체를 꺼내오고 컬렉션에서 제거함



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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package sec05.exam01_treeset;
 
import java.util.Iterator;
import java.util.TreeSet;
 
public class TreeSetExample1 {
    public static void main(String[] args) {
        TreeSet<Integer> scores = new TreeSet<Integer>();
        scores.add(new Integer(87));
        scores.add(new Integer(98));
        scores.add(new Integer(75));
        scores.add(new Integer(95));
        scores.add(new Integer(80));
        
        Integer score = null;
        
        score = scores.first();
        System.out.println("가장 낮은 점수: " + score);
        
        score = scores.last();
        System.out.println("가장 높은 점수: " + score + "\n");
        
        score = scores.lower(new Integer(95));
        System.out.println("95점 아래 점수: " + score);
        
        score = scores.higher(new Integer(95));
        System.out.println("95점 위의 점수: " + score + "\n");        
        
        score = scores.floor(new Integer(95));
        System.out.println("95점 이거나 바로 아래 점수: " + score);
        
        score = scores.ceiling(new Integer(85));
        System.out.println("85점 이거나 바로 위의 점수: " + score + "\n");
        
        // 1
        Iterator<Integer> iterator = scores.iterator();
        while(iterator.hasNext())
        {
            int s = iterator.next();
            // iterator.remove(); // remove를 따로해줘야함
            System.out.println(s);
        }
        // 2. 밑에꺼는 꺼내고 없앤다
        /*
        while(!scores.isEmpty()) 
        {
            score = scores.pollFirst(); // 제일 낮은 객체를 꺼내오고 컬렉션에서 제거함
            System.out.println(score + "(남은 객체 수: " + scores.size() + ")");
        }
        */
        System.out.println("=");
        
        while(!scores.isEmpty()) 
        {
            score = scores.pollLast(); // 제일 높은 객체를 꺼내오고 컬렉션에서 제거함
            System.out.println(score + "(남은 객체 수: " + scores.size() + ")");
        }
    }
}
 
cs


리턴 타입

메소드

설명

Iterator<E>

descendingIterator()

내림차순으로 정렬된 Iterator를 리턴

NavigableSet<E>

descendingSet()

내림차순으로 정렬된 NavigableSet을 반환


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
package sec05.exam01_treeset;
 
import java.util.NavigableSet;
import java.util.TreeSet;
 
public class TreeSetExample2 {
    public static void main(String[] args) {
        TreeSet<Integer> scores = new TreeSet<Integer>();
        scores.add(new Integer(87));
        scores.add(new Integer(98));
        scores.add(new Integer(75));
        scores.add(new Integer(95));
        scores.add(new Integer(80));
        
        // 내림차순
        NavigableSet<Integer> descendingSet = scores.descendingSet();
        for(Integer score : descendingSet) {
            System.out.print(score + " ");
        }
        System.out.println();
        
        // 오름차순
        NavigableSet<Integer> ascendingSet = descendingSet.descendingSet();
        
        for(Integer score : ascendingSet) {
            System.out.print(score + " ");
        }
    }
}
cs




리턴 타입

메소드

설명

NavigableSet<E>

headSet(

E toElement,

boolean inclusive

)

주어진 객체보다 낮은 객체들을 NaviableSet으로 리턴,

주어진 객체 포함 여부는 두 번째 매개값에 따라 달라짐

NavigableSet<E>

tailSet(

E fromElement,

boolean inclusive

)

주어진 객체보다 낮은 객체들을 NaviableSet으로 리턴,

주어진 객체 포함 여부는 두 번째 매개값에 따라 달라짐

NavigableSet<E>

subSet(

E fromElement,

boolean frominclusive,

E toElement,

boolean toinclusive

)

시작과 끝으로 주어진 객체 사이의 객체들을 NaviableSet으로 리턴.

시작과 끝 객체의 포함 여부는 두 번째 매개, 네 번째 매개값에 따라 달라짐


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
package sec05.exam01_treeset;
 
import java.util.NavigableSet;
import java.util.TreeSet;
 
public class TreeSetExample3 {
    public static void main(String[] args) {
        TreeSet<String> treeSet = new TreeSet<String>();
        treeSet.add("apple");
        treeSet.add("forever");        
        treeSet.add("description");
        treeSet.add("ever");
        treeSet.add("zoo");
        treeSet.add("base");
        treeSet.add("guess");
        treeSet.add("cherry");
        
        System.out.println("[c~f 사이의 단어 검색]");
        NavigableSet<String> rangeSet = treeSet.subSet("c"true"f"true);
        // c와 f의 사이 단어 (c, f 포함)
        for(String word : rangeSet) {
            System.out.println(word);
        }
    }
}
cs


15.5.3 TreeMap


리턴 타입

메소드

설명

Map.Entry<K,V>

firstEntry()

제일 낮은 Map.Entry를 리턴

Map.Entry<K,V>

lastEntry()

제일 낮은 Map.Entry를 리턴

Map.Entry<K,V>

lowerEntry(K key)

주어진 키보다 바로 아래의 Map.Entry를 리턴

Map.Entry<K,V>

higherEntry(K key)

주어진 키보다 바로 위의 Map.Entry를 리턴

Map.Entry<K,V>

floorEntry(K key)

주어진 키와 동등한 키가 있으면 해당 Map.Entry를 리턴,

없다면 주어진 키 바로 위의 Map.Entry를 리턴

Map.Entry<K,V>

ceilingEntry(K key)

주어진 키와 동등한 키가 있으면 해당 Map.Entry를 리턴,

없다면 주어진 키 바로 위의 Map.Entry를 리턴

Map.Entry<K,V>

pollFirstEntry()

제일 낮은 Map.Entry를 꺼내고오고 컬렉션에서 제거함

Map.Entry<K,V>

pollLastEntry()

제일 높은 Map.Entry를 꺼내고오고 컬렉션에서 제거함


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
package sec05.exam02_treemap;
 
import java.util.Map;
import java.util.TreeMap;
 
public class TreeMapExample1 {
    public static void main(String[] args) {
        TreeMap<Integer,String> scores = new TreeMap<Integer,String>();
        scores.put(new Integer(87), "홍길동");
        scores.put(new Integer(98), "이동수");
        scores.put(new Integer(75), "박길순");
        scores.put(new Integer(95), "신용권");
        scores.put(new Integer(80), "김자바");
        
        Map.Entry<Integer, String> entry = null;
        
        entry = scores.firstEntry();
        System.out.println("가장 낮은 점수: " + entry.getKey() + "-" + entry.getValue());
        
        entry = scores.lastEntry();
        System.out.println("가장 높은 점수: " + entry.getKey() + "-" + entry.getValue() + "\n");
        
        entry = scores.lowerEntry(new Integer(95));
        System.out.println("95점 아래 점수: " + entry.getKey() + "-" + entry.getValue());
        
        entry = scores.higherEntry(new Integer(95));
        System.out.println("95점 위의 점수: " + entry.getKey() + "-" + entry.getValue() + "\n");
        
        entry = scores.floorEntry(new Integer(95));
        System.out.println("95점 이거나 바로 아래 점수: " + entry.getKey() + "-" + entry.getValue());
        
        entry = scores.ceilingEntry(new Integer(85));
        System.out.println("85점 이거나 바로 위의 점수: " + entry.getKey() + "-" + entry.getValue() + "\n");
        
        while(!scores.isEmpty()) {
            entry = scores.pollFirstEntry();
            System.out.println(entry.getKey() + "-" + entry.getValue() + "(남은 객체 수: " + scores.size() + ")");
        }
    }
}
cs



리턴 타입

메소드

설명

NavigableSet<K>

descendingKeySet()

내림차순으로 정렬된 키의 NavigableSet를 리턴

NavigableMap<K, V>

descendingMap()

내림차순으로 정렬된 Map.Entry의 NavigableMap을 리턴


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
package sec05.exam02_treemap;
 
import java.util.Map;
import java.util.NavigableMap;
import java.util.Set;
import java.util.TreeMap;
 
public class TreeMapExample2 {
    public static void main(String[] args) {
        TreeMap<Integer,String> scores = new TreeMap<Integer,String>();
        scores.put(new Integer(87), "홍길동");
        scores.put(new Integer(98), "이동수");
        scores.put(new Integer(75), "박길순");
        scores.put(new Integer(95), "신용권");
        scores.put(new Integer(80), "김자바");
        
        NavigableMap<Integer,String> descendingMap = scores.descendingMap();
        Set<Map.Entry<Integer,String>> descendingEntrySet = descendingMap.entrySet();
        for(Map.Entry<Integer,String> entry : descendingEntrySet) {
            System.out.print(entry.getKey() + "-" + entry.getValue() + " ");
        }
        System.out.println();
        
        NavigableMap<Integer,String> ascendingMap = descendingMap.descendingMap();
        Set<Map.Entry<Integer,String>> ascendingEntrySet = ascendingMap.entrySet();
        for(Map.Entry<Integer, String> entry : ascendingEntrySet) {
            System.out.print(entry.getKey() + "-" + entry.getValue() + " ");
        }
    }
}
cs




15.5.4 Comparable과 Comparator


Posted by 너래쟁이
: