2014-07-05 77 views
1

我正在製作一個簡單的2D java sidescroller,現在,我有一個HashMap,其中我有一個類Location作爲鍵,Entity作爲值。我希望能夠將Entity對象存儲在TreeMap(或類似的地方)中,其中我將有2個密鑰:double xdouble y。並能夠獲得所有值,其中第一個鍵在特定數字之間,第二個鍵也是如此。到目前爲止,我只發現TreeMap,但它只允許我有1雙作爲關鍵。有沒有一種方法可以在Java中實現,而不必遍歷每個密鑰(如Location)並檢查其中的2個數字是否在指定範圍內?有兩個鍵的TreeMap

回答

2

雖然它不美觀 - 一種方法是使用TreeMap<Double, TreeMap<Double, Entity>>。然後得到一個正方形內的所有實體,你可以做map.subMap(minX, maxX).subMap(minY, maxY).values();

2

我會用2個樹狀圖,一個用於x和一個Y:

NavigableMap<Double, Object> x = new TreeMap<>(); 
    NavigableMap<Double, Object> y = new TreeMap<>(); 

    Object obj1 = new Object(); 
    x.put(2.0, obj1); 
    y.put(10.0, obj1); 

    // find objects with x between 1 and 3; y between 9 and 11 

    Collection<Object> c1 = x.subMap(1.0, true, 3.0, true).values(); 
    Collection<Object> c2 = y.subMap(9.0, true, 11.0, true).values(); 
    c1.retainAll(c2); 

現在C1中包含的結果