我有一個列表,其中有三個對象,假設它被命名爲數據。如何按值存儲間隔和查找間隔?
- 數據[0]具有0-6
- 數據[1]已6-13
- 數據[2]具有13-23
我有一種方法,它具有兩個論點之一是starttime
,另一個是endtime
。 我的要求是,如果輸入值在第一個對象之間,那麼這個方法將返回第一個對象。如果輸入值位於前兩個對象之間,那麼該方法應返回前兩個對象。我怎樣才能做到這一點。任何人都可以告訴我嗎?
我有一個列表,其中有三個對象,假設它被命名爲數據。如何按值存儲間隔和查找間隔?
我有一種方法,它具有兩個論點之一是starttime
,另一個是endtime
。 我的要求是,如果輸入值在第一個對象之間,那麼這個方法將返回第一個對象。如果輸入值位於前兩個對象之間,那麼該方法應返回前兩個對象。我怎樣才能做到這一點。任何人都可以告訴我嗎?
假設你沒有重疊的範圍和範圍都在你的榜樣不斷(否則你將需要實現自己的東西):
可以使用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,並且不檢查這些值的映射。
對於您的問題,您可以檢查starttime
和endtime
,看看你是否得到相同的對象。
如果範圍形成連續譜,或者僅在末端重疊,則這是可接受的解決方案。如果範圍可以重疊多次,那麼這將是不同的故事。 – nhahtdh
我同意,基於他的例子寫道。 –
刺戳查詢?對效率有任何要求嗎? – nhahtdh
是的。搜索應該有效地執行。 – aaaa
*如果我沒有記錯*,間隔樹將允許您有效地做到這一點。 – nhahtdh