2012-12-19 72 views
2

我有一個列表,其中有三個對象,假設它被命名爲數據。如何按值存儲間隔和查找間隔?

  1. 數據[0]具有0-6
  2. 數據[1]已6-13
  3. 數據[2]具有13-23

我有一種方法,它具有兩個論點之一是starttime,另一個是endtime。 我的要求是,如果輸入值在第一個對象之間,那麼這個方法將返回第一個對象。如果輸入值位於前兩個對象之間,那麼該方法應返回前兩個對象。我怎樣才能做到這一點。任何人都可以告訴我嗎?

+0

刺戳查詢?對效率有任何要求嗎? – nhahtdh

+0

是的。搜索應該有效地執行。 – aaaa

+0

*如果我沒有記錯*,間隔樹將允許您有效地做到這一點。 – nhahtdh

回答

4

假設你沒有重疊的範圍和範圍都在你的榜樣不斷(否則你將需要實現自己的東西):

可以使用TreeMap存儲開始或範圍他們的價值,例如

TreeMap<Int, Object> map = new TreeMap<Int, Object>(); 
map.put(0, obj1); 
map.put(6, obj2); 
map.put(13, obj3); 

然後使用TreeMap.floorEntry得到the greatest key less than or equal to the given key

那麼你得到:

map.get(0); // obj1 
map.get(3); // /obj2 
nap.get(22); // obj3 

您可以添加一個檢查以查看密鑰是否小於0或大於23,並且不檢查這些值的映射。

對於您的問題,您可以檢查starttimeendtime,看看你是否得到相同的對象。

+1

如果範圍形成連續譜,或者僅在末端重疊,則這是可接受的解決方案。如果範圍可以重疊多次,那麼這將是不同的故事。 – nhahtdh

+0

我同意,基於他的例子寫道。 –