2014-11-08 110 views
0

我正在使用SortedSet存儲時間間隔,當我添加一個新時間間隔時,需要檢查它是否與集中的現有時間間隔重疊。提高效率添加間隔集Java

我的代碼現在是

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; 

} 

對於上面的代碼中,時間間隔是包含所有時間間隔的集合,getB獲取間隔的端部和木屐獲取間隔的開始部分。

它工作正常,雖然我正在努力提高效率,因爲它執行時間太長。

有沒有人看到提高效率明智的任何領域?如果不循環集合中的所有間隔,是否可以做到這一點?

回答

1

不確定你是否會接受,但我只是建議你使用Guava

因爲它具有所有您需要的內置工具,並且您可以從此庫中預期,所以已經過全面測試:RangeRangeSet