提高效率添加到区间集Java

时间:2014-11-08 19:25:41

标签: java performance intervals

我目前正在使用SortedSet存储间隔,当我添加新的间隔时,需要检查它是否与集合中的现有间隔重叠。

我现在的代码是

public boolean add(Interval<K> i) {
    Comparable ib = i.getB();
    Comparable ia = i.getA();   
    for(Interval m : intervals) {
        Comparable b = m.getB();
        Comparable a = m.getA();

        if (a.compareTo(ia) == 0 && b.compareTo(ib) == 0) {
            return false; // same interval already there so don't add / return false
        }           
        if (b.compareTo(ia) <= 0 && a.compareTo(ia) < 0) {
            continue; // exists before current element
        }
        if (a.compareTo(ib) >= 0 && a.compareTo(ia) > 0) {
            continue; // exists after
        } 
        return false; // interval overlaps, so don't add / return false
    }
    intervals.add(i);
    return true;

}

对于上面的代码,interval是包含所有间隔的集合,getB获取间隔的结束部分,getA获取间隔的开始部分。

虽然我正在努力提高效率,但由于执行时间太长,所以效果很好。

有没有人看到任何提高效率的方面?是否可以在不循环集合中的所有间隔的情况下执行此操作?

1 个答案:

答案 0 :(得分:1)

不确定您是否会接受,但我建议您使用Guava

因为它拥有您需要的所有工具,内置并且正如您所期望的那样,经过全面测试:RangeRangeSet