[위 에] Guava 배 움 의 RangeSet

3524 단어 guava
앞서 Guava 에서 새로 도 입 된 Range 류 에 대해 이야기 하고 그 역할 도 알 게 되 었 습 니 다. 그러면 오늘 은 Guava 에서 Range 를 사용 하 는 곳: RangeSet 류 에 대해 이야기 하 겠 습 니 다.RangeSet 클래스 는 비어 있 지 않 고 교차 하지 않 는 범 위 를 저장 하 는 데이터 구조 입 니 다.RangeSet 대상 에 새로운 범 위 를 추가 해 야 한다 면 교차 하 는 모든 부분 이 합 쳐 지고 모든 빈 범 위 는 무시 된다.이렇게 많은 이 야 기 를 했 는데, 우 리 는 RangeSet 을 어떻게 이용 해 야 합 니까?RangeSet 클래스 는 인터페이스 입 니 다. 하위 클래스 로 RangeSet 형의 대상 을 설명 해 야 합 니 다. RangeSet 인터페이스의 클래스 는 Immutable RangeSet 과 TreeRangeSet 이 있 습 니 다. Immutable RangeSet 은 수정 할 수 없 는 RangeSet 이 고 TreeRangeSet 은 트 리 형식 으로 이 루어 집 니 다.다음은 주로 TreeRangeSet 의 용법 에 대해 이야기 합 니 다.
import com.google.common.collect.*;

/**
 * User:     
 * Email:[email protected]
 * Blog: http://www.iteblog.com
 * Date: 13-7-17
 * Time:   4:10
 */

public void testRangeSet(){
        RangeSet rangeSet = TreeRangeSet.create();
        rangeSet.add(Range.closed(1, 10));
        System.out.println(rangeSet);
        rangeSet.add(Range.closedOpen(11, 15));
        System.out.println(rangeSet);
        rangeSet.add(Range.open(15, 20));
        System.out.println(rangeSet);
        rangeSet.add(Range.openClosed(0, 0));
        System.out.println(rangeSet);
        rangeSet.remove(Range.open(5, 10));
        System.out.println(rangeSet);
    }

위의 함수 의 운행 결 과 는 다음 과 같다.
{[1‥10]}
{[1‥10][11‥15)}
{[1‥10][11‥15)(15‥20)}
{[1‥10][11‥15)(15‥20)}
{[1‥5][10‥10][11‥15)(15‥20)}

Range 류 의 방법 에 익숙 하지 않 으 니 을 읽 으 세 요.
주의: RangeSet 은 JDK 1.6 의 NavigableMap 특성 을 충분히 활용 해 야 하기 때문에 JDK 1.6 이하 버 전 은 사용 할 수 없습니다.
그러면 우리 가 range set 의 모든 요 소 를 옮 겨 다 닐 필요 가 있다 면 다음 방법 으로 이 루어 질 수 있 습 니 다.
public void iteratorRangeSet(RangeSet integerRangeSet) {
        if(integerRangeSet == null){
            return;
        }

        Set<Range> ranges = integerRangeSet.asRanges();
        Iterator<Range> iterator = ranges.iterator();
        while(iterator.hasNext()){
            Range next = iterator.next();
            System.out.println(next);
        }
}

실행 결과:
[1‥5]
[10‥10]
[11‥15)
(15‥20)

만약 에 우리 가 rangeSet 의 상호 보완 범 위 를 얻 으 려 면 RangeSet 이 제공 하 는 complement () 방법 을 사용 할 수 있 습 니 다. rangeSet. complement () 역시 RangeSet 입 니 다. 그 중의 요소 도 서로 교차 하지 않 고 비어 있 지 않 은 RangeSet 입 니 다. 그러면 rangeSet 의 상호 보완 집합 은 아래 와 같이 쓸 수 있 습 니 다.
RangeSet complement = rangeSet.complement();
System.out.println(complement);

얻 은 결 과 는:
{(-∞‥1)(5‥10)(10‥11)[15‥15][20‥+∞)}

마침 range Set 의 상호 보완 이다.rangeSet 에서 어떤 요소 가 rangeSet 에 있 는 지 확인 하려 면 contains (C) 로 이 루어 질 수 있 습 니 다. 그 중에서 C extends java. lang. Comparable.예 를 들 어 저 는 상기 range Set 에 15 가 포함 되 어 있 는 지 알 고 싶 습 니 다. 이렇게 쓸 수 있 습 니 다.
boolean isIn = rangeSet.contains(15);
System.out.println(isIn);//false,           15.

어떤 요소 가 rangeSet 의 어느 범위 안에 있 는 지 알 고 싶다 면 이렇게 쓸 수 있 습 니 다.
Range integerRange = rangeSet.rangeContaining(17);
System.out.println(integerRange); 
//  (15‥20),  17    (15‥20) ,        。

어떤 범위 가 rangeSet 범위 에 포함 되 어 있 는 지 알 고 싶다 면 이렇게 쓸 수 있 습 니 다.
boolean encloses = rangeSet.encloses(Range.closedOpen(18, 20));
System.out.println(encloses);//true.    (18,20)     (15,20) 
encloses = rangeSet.encloses(Range.closedOpen(5, 20));
System.out.println(encloses);//false.    (5,20)  rangeSet       .

(끝)
옮 겨 싣 기 설명: 과거 기억 옮 기기 (http://www.iteblog.com/) 본문 링크 주소: Guava 학습 의 RangeSet (http://www.iteblog.com/archives/538)

좋은 웹페이지 즐겨찾기