将元素添加到Java中的排序集的头部时键超出范围

时间:2019-03-10 11:14:18

标签: java sortedset headset

我试图检索排序后的集合的头部,将其分配给相同的变量,然后再向其中添加一些值,但是我收到了java.lang.IllegalArgumentException: key out of range

我的下面的代码

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

class StackOverflow{
    public static void main(String args[]){
        SortedSet<Integer> some_set = new TreeSet<Integer>();
        some_set.add(5);
        some_set.add(3);
        some_set.add(12);
        some_set.add(15);

        some_set = some_set.headSet(10);
        some_set.add(10);

        System.out.println(some_set);
    }
}

我读到有一些类似的限制范围,可以通过使用headSet来设置,但是我找不到防止这种情况的方法。使用headSet时是否可以有无限的上限,或者可以在分配后设置上限?我想出的唯一解决方案是

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

class StackOverflow{
    public static void main(String args[]){
        SortedSet<Integer> some_set = new TreeSet<Integer>();
        some_set.add(5);
        some_set.add(3);
        some_set.add(12);
        some_set.add(15);

        SortedSet<Integer> temp_some_set = new TreeSet<Integer>(some_set.headSet(10));
        some_set = temp_some_set;
        some_set.add(10);

        System.out.println(temp_some_set);
    }
}

但是这会创建不需要的新排序集,其中包含来自前一个集的开头的元素,这在我不得不进行大量操作时会降低程序速度。

1 个答案:

答案 0 :(得分:0)

我相信您对headSet的使用不正确。

应使用它从主集中获取值的子集。文件-here

我相信您要在用例中使用last()方法。