为什么要附加空字符" \ 0"在SortedSet中查找headSet时?

时间:2017-01-29 22:58:11

标签: java sortedset

这个成语是什么意思?与" \ 0"连接的java字符串(例如"日本\ 0")?如在

SortedSet<String> countryHeadSet 
    = countrySet.headSet("Japan\0");

字符串"Japan\0"在通话中的含义是什么?如果程序员只写

,它会有什么不同吗?
countryHeadSet 
    = countrySet.headSet("Japan");

1 个答案:

答案 0 :(得分:4)

我找到了答案。感谢所有的想法。

使用字符串+ "\0"的成语之一,尤其是当你看到它时 使用SortedSet的范围视图操作,是用它来查找 字符串的后继

需要这样的后继者,因为那些范围视图操作(subSet()headSet()tailSet())提供半开间隔,以及您 可能需要字符串的后继来构造封闭间隔。这在Java Doc of Sorted Set

中有解释
  

有几种方法返回具有受限范围的子集。这样的范围是   半开,也就是说,它们包含低端点但不包括高端点   终点(如适用)。如果你需要一个封闭的范围(哪个   包括两个端点),元素类型允许计算   给定值的后继者,仅请求子范围   lowEndpoint to successor(highEndpoint)。例如,假设s是   一组有序的字符串。以下习语获取包含的视图   s中从低到高的所有字符串,包括:

     

SortedSet sub = s.subSet(低,高+&#34; \ 0&#34;);

换句话说,下面两个调用之间的区别是:

countrySet.headSet("Japan\0");
countrySet.headSet("Japan")

是第一个获得countrySet中的所有字符串 在从集合的开头到包括的范围内 字符串"Japan"(即范围是关闭的间隔);而 第二个将获得范围内的所有字符串 集合的开头,直到但不包括 字符串"Japan"(即范围是半开间隔)。

我包括一个我自己的测试程序来演示使用 成语:

import java.util.Arrays;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;

public class StringPlusNull {

    public static void main(String[] args) {
        List<String> countryList 
            = Arrays.asList("U.S.", "U.K.", "China", "Japan", "Korea");
        SortedSet<String> countrySet
            = new TreeSet<>(countryList);

        String toElement = "Japan";
        SortedSet<String> countryHeadSet 
            = countrySet.headSet(toElement);
        System.out.format("There are %d countries in the "
                + "(half-open) headset [, %s): %s%n"
                , countryHeadSet.size(), toElement, countryHeadSet);

        toElement = "Japan\0";
        countryHeadSet 
            = countrySet.headSet(toElement);
        System.out.format("There are %d countries in the "
                + "(half-open) headset [, %s): %s%n"
                , countryHeadSet.size(), toElement, countryHeadSet);
    }

}

输出结果为:

There are 1 countries in the (half-open) headset [, Japan): [China]
There are 2 countries in the (half-open) headset [, Japan ): [China, Japan]