英文:
How to get IllegalArgumentException while fetching values from tree set?
问题
根据tailSet方法的定义:
TreeSet类的tailSet()方法返回集合中大于或等于fromElement的元素。如果传递的值在范围之外,将抛出IllegalArgumentException异常。
但是当我尝试实现它时,它返回了一个空集,而不是抛出IllegalArgumentException异常。
public class SampleSet {
public static void main(String[] args) {
NavigableSet obj = new TreeSet();
NavigableSet obj1 = new TreeSet();
obj.add(4);
obj.add(6);
obj.add(9);
obj.add(2);
System.out.println(obj);
obj1 = (NavigableSet) obj.tailSet(9, false);
System.out.println(obj1);
}
}
请解释如何在获取时触发IllegalArgumentException异常。提前感谢您的回答。
英文:
As per the tailset definition
> "A tailSet() method of TreeSet class returns the element present in
> the set, which is greater than or equal to fromElement. If the passed
> value is outside of the range, an IllegalArgumentException is thrown"
but when i am trying to implement it, its returning blank set instead of throwing IllegalArgumentException.
public class SampleSet {
public static void main(String[] args) {
NavigableSet obj = new TreeSet();
NavigableSet obj1 = new TreeSet();
obj.add(4);
obj.add(6);
obj.add(9);
obj.add(2);
System.out.println(obj);
obj1 = (NavigableSet) obj.tailSet(9,false);
System.out.println(obj1);
}
}
Please explain what is the way to get IllegalArgumentException while fetching. Thanks in advance.
答案1
得分: 0
我以你的代码为基础进行了使用。范围可以由 subSet() (javaDoc) 方法来确定:
NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
在这个子集上使用 tailSet()
并传入超出范围的值将会引发 IllegalArgumentException
异常:
import java.util.NavigableSet;
public class Testing {
public static void main(String[] args) {
NavigableSet<Integer> obj = new TreeSet<>();
NavigableSet<Integer> obj1 = new TreeSet<>();
obj.add(4);
obj.add(6);
obj.add(9);
obj.add(2);
System.out.println(obj);
obj1 = obj.tailSet(9, false);
System.out.println(obj1);
obj1 = obj.subSet(4, true, 6, true);
obj1 = obj1.tailSet(9, false); // 9 超出范围
}
}
结果:
[2, 4, 6, 9]
[]
Exception in thread "main" java.lang.IllegalArgumentException: fromKey out of range
at java.base/java.util.TreeMap$AscendingSubMap.tailMap(TreeMap.java:1880)
at java.base/java.util.TreeSet.tailSet(TreeSet.java:350)
at Testing.main(Testing.java:989)
英文:
I used your code as a basis. The range can be determined by a subSet() (javaDoc):
NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
Using tailSet()
on this subset with an out-of-range value will cause an IllegalArgumentException
:
import java.util.NavigableSet;
public class Testing {
public static void main(String[] args) {
NavigableSet<Integer> obj = new TreeSet<>();
NavigableSet<Integer> obj1 = new TreeSet<>();
obj.add(4);
obj.add(6);
obj.add(9);
obj.add(2);
System.out.println(obj);
obj1 = obj.tailSet(9,false);
System.out.println(obj1);
obj1 = obj.subSet(4, true, 6, true);
obj1 = obj1.tailSet(9,false); // 9 is out of range
}
}
Result:
[2, 4, 6, 9]
[]
Exception in thread "main" java.lang.IllegalArgumentException: fromKey out of range
at java.base/java.util.TreeMap$AscendingSubMap.tailMap(TreeMap.java:1880)
at java.base/java.util.TreeSet.tailSet(TreeSet.java:350)
at Testing.main(Testing.java:989)
专注分享java语言的经验与见解,让所有开发者获益!
评论