怎么在从树集(tree set)获取值时引发IllegalArgumentException?

huangapple 未分类评论58阅读模式
英文:

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&lt;E&gt; 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&lt;Integer&gt; obj = new TreeSet&lt;&gt;();
        NavigableSet&lt;Integer&gt; obj1 = new TreeSet&lt;&gt;();
        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 &quot;main&quot; 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)

huangapple
  • 本文由 发表于 2020年7月28日 21:10:36
  • 转载请务必保留本文链接:https://java.coder-hub.com/63134942.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定