gpt4 book ai didi

scjp - 树集子集

转载 作者:行者123 更新时间:2023-12-04 05:29:12 24 4
gpt4 key购买 nike

嗨,我无法理解为什么输出是 'ex [6, 7, b, d] [6, 7, b]'
这段代码。请有人建议子集如何与
数字和字母?谢谢

import java.util.*;
public class Corner {
public static void main(String[] args) {
TreeSet<String> t1 = new TreeSet<String>();
TreeSet<String> t2 = new TreeSet<String>();
t1.add("b"); t1.add("7");
t2 = (TreeSet)t1.subSet("5", "c");

try {
t1.add("d");
t2.add("6");
t2.add("3");
}
catch (Exception e) { System.out.print("ex "); }
System.out.println(t1 + " " + t2);
} }

最佳答案

我做了一些更改来清理您的代码(使用原始泛型类型和未经检查的转换)并使日志输出更具洞察力:

import java.util.SortedSet;
import java.util.TreeSet;

public class Corner {
public static void main(String[] args) {
SortedSet<String> t1 = new TreeSet<String>();
SortedSet<String> t2 = new TreeSet<String>();
t1.add("b");
t1.add("7");
System.out.println(t1 + " " + t2);
t2 = t1.subSet("5", "c");
System.out.println(t1 + " " + t2);
t1.add("d");
System.out.println(t1 + " " + t2);
t2.add("6");
System.out.println(t1 + " " + t2);
try {
t2.add("3");
} catch (Exception e) {
e.printStackTrace(System.out);
}
System.out.println(t1 + " " + t2);
}
}

输出如下所示:
[7, b] []
[7, b] [7, b]
[7, b, d] [7, b]
[6, 7, b, d] [6, 7, b]
java.lang.IllegalArgumentException: key out of range
at java.util.TreeMap$NavigableSubMap.put(Unknown Source)
at java.util.TreeSet.add(Unknown Source)
at Corner.main(Corner.java:18)
[6, 7, b, d] [6, 7, b]

好的,在插入“b”和“7”之后,t1 包含 ASCII(或 Unicode)排序顺序中的那些元素。 t2 是空的。这里并不奇怪。

subSet调用,两个集合具有相同的内容,因为给定的范围“5”到“c”跨越了原始集合从“7”到“b”的整个当前范围。也不意外。

请注意: 子集由原始集合支持 API JavaDoc 所述.

此外,API 描述说 返回的集合将抛出 IllegalArgumentException试图在其范围之外插入一个元素。 这在以后很重要。

好的,接下来您将元素“d”添加到 t1 中,这在 t1 中显示,但不在 t2 中,因为“d”在 t2 的“5”到“c”范围之外。

现在您将元素“6”添加到 t2(仍然由 t1 支持!)。它在 t2 的正确范围内,因此成功添加到两个逻辑集。

现在您遇到了麻烦,因为您尝试将“3”添加到 t2,这超出了“5”到“c”的范围,从而导致 IllegalArgumentException这可以在日志输出中看到。该元素不会插入到 t2 中(因此也不会插入到 t1 中)。因此,它不会显示在日志输出的最后一行中。

底线:根据 JDK 文档,您的程序的行为与预期一致。 :-)

关于scjp - 树集子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12830320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com