자바에서 제네릭을 사용하여 추상 AVL 트리 구현을 만들고 있습니다. 동일한 데이터 인스턴스를 사용하지만 다른 키를 사용하여 트리의 인스턴스를 여러 개 가져야합니다. 예 : 데이터 클래스 자동차를 고려해 보겠습니다. 같은 시간에 두 그루 나무에 있어야하는 경우가 필요합니다. 그러나 첫 번째 나무는 번호판에 따라 분류되고 두 번째 나무는 VIN 번호에 따라 분류됩니다. 어떻게 보장할까요?다른 비교기를 사용하여 일반 구조의 두 인스턴스를 만드는 방법은 무엇입니까?
2
A
답변
2
추상 트리 구현은 generics 위에 구축되었으므로 비교기를 avl 트리 생성자에 전달할 수 있으므로 비교기에 따라 트리에서 순서를 유지하는 방법을 알 수 있습니다.
class Tree<T> {
private final Comparator<T> comparator;
public Tree(final Comparator<T> comparator) {
this.comparator = comparator;
}
}
class Car {
private String model;
private String VIN;
private String licencePlate;
public String getModel() {
return this.model;
}
public String getVIN() {
return this.VIN;
}
public String getLicencePlate() {
return this.licencePlate;
}
}
public static void main(final String[] args) {
Comparator<Car> comp1 = new Comparator<Car>() {
@Override
public int compare(final Car car1, final Car car2) {
return car1.getVIN().compareTo(car2.getVIN());
}
};
Comparator<Car> comp2 = new Comparator<Car>() {
@Override
public int compare(final Car car1, final Car car2) {
return car1.getLicencePlate().compareTo(car2.getLicencePlate());
}
};
Tree<Car> tree1 = new Tree<Car>(comp1); //this tree will keep order according to car's VIN
Tree<Car> tree2 = new Tree<Car>(comp2); // this tree will keep order according to car's licence plate
}
2
트리를 작성할 때 비교기를 제공해야합니다. simpke 구현은 루트 노드에 대한 참조를 유지할 수 있습니다. 팩토리 메서드를 사용하면 다음과 같이 작동 할 수 있습니다.
public class MyTreeNode<T> {
private Comparator<? super T> comparator;
protected MyTreeNode() {}
public static <T> MyTreeNode<T> create(Comparator<? super T> comparator) {
MyTreeNode<T> node = new MyTreeNode<T>();
node.comparator = comparator;
return node;
}
}
사용 방법에 따라 참조를 하위 노드로 전달할 수 있습니다.
관련 문제
- 1. 비교기를 사용하여 클래스를 만드는 방법은 무엇입니까?
- 2. 일반 트리 세트로 비교기를 만드는 방법은 무엇입니까? 제네릭 도움이 필요에
- 3. 클래스의 인스턴스를 만드는 방법은 무엇입니까?
- 4. 동일한 힙 자바의 다른 인스턴스에 다른 비교기를 지정하는 방법은 무엇입니까?
- 5. 클래스의 인스턴스를 만드는 다른 방법
- 6. 주문형 인스턴스를 만드는 방법은 무엇입니까?
- 7. 활동의 여러 인스턴스를 만드는 방법은 무엇입니까? - revisited
- 8. 플래시로 인스턴스를 만드는 방법은 무엇입니까?
- 9. Graphics2D 인스턴스를 만드는 방법은 무엇입니까?
- 10. 델리게이트 인스턴스를 만드는 방법은 무엇입니까?
- 11. org.springframework.dao.DataAccessException의 인스턴스를 만드는 방법은 무엇입니까?
- 12. 클래스의 인스턴스를 만드는 방법은 무엇입니까?
- 13. 같은 서비스에 대해 두 개의 구성된 인스턴스를 만드는 방법은 무엇입니까?
- 14. 일반 StateManagedCollection을 만드는 방법은 무엇입니까?
- 15. 일반 목록에 새 인스턴스를 추가하는 방법은 무엇입니까?
- 16. 일반 사전을 만드는 방법은 무엇입니까?
- 17. 활동의 인스턴스를 여러 개 만드는 방법은 무엇입니까?
- 18. 다른 정의를 사용하여 정적으로 링크 된 라이브러리의 두 인스턴스를 만드는 방법은 무엇입니까?
- 19. MATLAB에서 일반 구조를 만드는 방법은 무엇입니까?
- 20. 동일한 UIViewController의 새 인스턴스를 만드는 방법은 무엇입니까?
- 21. 개념 증명 : 리플렉션을 사용하여 일반 비교기 메서드를 만드는 방법은 무엇입니까?
- 22. File 클래스의 인스턴스를 만드는 방법은 무엇입니까?
- 23. 여러 셰이더 효과 인스턴스를 만드는 방법은 무엇입니까?
- 24. 일반 AsyncTask를 만드는 방법은 무엇입니까?
- 25. 일반 경로를 만드는 방법은 무엇입니까?
- 26. PostgreSQL : 동일한 창 컴퓨터에서 두 개의 인스턴스를 만드는 방법은 무엇입니까?
- 27. 자바 리플렉션을 사용하여 protobuf 인스턴스를 만드는 방법은 무엇입니까?
- 28. coredata없이 nsmanagedobject의 인스턴스를 만드는 방법은 무엇입니까?
- 29. 두 표현식 트리에서 일반 람다를 만드는 방법은 무엇입니까?
- 30. 트리에 인스턴스를 사용하여 Typeclass Eq를 만드는 방법은 무엇입니까?
트리 클래스가 어떻게 보이는지 보여주십시오. 문제가 무엇인지는 분명하지 않습니다. 객체는 Java에서 다른 비교자를 사용하여 정렬 된 트리에 쉽게 저장할 수 있습니다. –
예를 들어 TreeMap을 보았습니까? JDK에서 Comparator를 어떻게 사용합니까? – SMA