2014-10-12 73 views
0

我試圖在泛型的幫助下使用Java實現RBTree http://en.wikipedia.org/wiki/Red%E2%80%93black_tree,因爲我將需要這個結構在項目的未來部分。RBTree與泛型的實現

我有RBTree類:

public class RBTree<T extends Comparable<T>> { ... } 

和RBNode類:

public class RBNode<T extends Comparable<T>>{ ... 
private T key; 
...} 

現在這裏是問題。我有一個Product類,它有一個ProductData對象等等。我需要我的樹來保存有關產品到期日期的信息,並且通過我需要的日期來找到產品。

我現在可以寫我的測試代碼:

ProductDate p = new ProductDate(new ProductData("Jahoda", "12345678", new Date(), new Date(), 555, 10)); 
ProductDate r = new ProductDate(new ProductData("Mandarinka", "987654321", new Date(), new Date(), 111, 12)); 
ProductDate d = new ProductDate(new ProductData("Malina", "987654321", new Date(), new Date(), 222, 13)); 

RBTree<Date> produkty = new RBTree<Date>(); 
produkty.insert(p.getKey()); 
produkty.insert(r.getKey()); 
produkty.insert(d.getKey()); 

,但在這裏我將失去指向給定的產品。如何防止這一點?

我可以提供我的完整代碼給github,如果是的話。

+0

1.你指的是什麼意思? Java中沒有指針。 2.爲什麼使用新的X(新的X(...))而不是僅僅新的X(...)? – kraskevich 2014-10-12 10:45:50

+0

以及沒有默認指針,但引用,對不起我的壞...我不使用X(新的X(...)),但新的PDate(新的PData)),這是一個區別。 ProductDate是Product類的擴展類,具有ProductData引用。 – 2014-10-12 10:47:50

+0

來自JDK的TreeMap是帶有泛型的紅黑樹實現。 – m3th0dman 2014-10-12 10:58:42

回答

0

如果您希望它作爲地圖使用,而不是作爲一組(即能夠通過鍵獲取值),則可以稍微更改RBNode類,以便它同時存儲:鍵和值。 它可以看起來像:

public class RBNode<K extends Comparable<K>, V> { 
    K key; 
    V value; 
    ... 
} 

隨後的ProductDate實例應該,如果你想要得到的產品爲指定的日期作爲鍵和ProductData實例作爲值。