2014-10-12 2 views
0

RBTree http://en.wikipedia.org/wiki/Red%E2%80%93black_tree을 Java에서 제네릭으로 구현하려고합니다. 향후이 프로젝트의 일부로이 구조가 필요합니다.제네릭을 사용하여 RBTree를 구현하십시오.

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

및 RBNode 클래스 :

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

지금 여기에 문제가

나는 RBTree 클래스가 있습니다. ProductData 객체가있는 클래스 Product가 있습니다. 제품 만료일에 대한 정보를 보유하고 제품을 찾을 수 있어야하는 날짜까지 내 나무가 필요합니다.

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

포인터로 무엇을 의미합니까? Java에는 포인터가 없습니다. 2. 왜 새로운 X (...) 대신 새로운 X (새로운 X (...))를 사용합니까? – kraskevich

+0

잘 아니지만, 기본 포인터, 참조, 내 나쁜 죄송합니다 ... 나는 X (새로운 X (...))하지만 새로운 PDate (새로운 PData)를 사용하지 마십시오, 그 차이입니다. ProductDate는 ProductData 참조가있는 Product 클래스의 확장 클래스입니다. –

+0

JDK의 TreeMap은 제네릭을 사용하는 Red Black 트리 구현입니다. – m3th0dman

답변

0

집합이 아닌지도로 사용하려면 키 값과 값을 모두 저장하도록 RBNode 클래스를 약간 변경할 수 있습니다. 그것은 그렇게 볼 수 있습니다 :

당신이 주어진 날짜에 제품을 얻으려면 다음 ProductDate의 인스턴스를 값으로 키와 ProductData의 인스턴스로 사용되어야한다
public class RBNode<K extends Comparable<K>, V> { 
    K key; 
    V value; 
    ... 
} 

.

관련 문제