basyura's blog

あしたになったらほんきだす。

SortedMap#subMap で上下端点を含む含まない

注: このメソッドは常に、その下端点は含むが上端点は含まない「片側が開いた範囲」を返します。。上下端点を含む「閉じた範囲」が必要で、キーの型により直後のキーの計算が可能な場合、単に lowEndpoint から直後のキー (highEndpoint) までの部分範囲を指定してください。たとえば、m はそのキーが文字列のマップである場合、次の慣用法は、キーが low 〜 high までの範囲 (上下端点を含む) にある m 内のすべてのキーと値のマッピングを保持するビューを取得します。
Map sub = m.subMap(low, high+"\0");

SortedMap#subMap

つーことで試してみる。

import java.util.*;
public class Test {
  public static void main(String args[]) {
    TreeMap map = new TreeMap();
    map.put("1" , "a");
    map.put("2" , "b");
    map.put("3" , "c");
    map.put("4" , "d");
    map.put("5" , "e");

    Map sub = map.subMap("1","5");
    for(Iterator iter = sub.keySet().iterator() ; iter.hasNext() ;) {
        Object key = iter.next();
        System.out.println(key);
        // 1 
        // 2
        // 3
        // 4
    }
    sub = map.subMap("1","5\0");
    for(Iterator iter = sub.keySet().iterator() ; iter.hasNext() ;) {
        Object key = iter.next();
        System.out.println(key);
        // 1 
        // 2
        // 3
        // 4
        // 5
    }
  }
}