je dois mettre en œuvre un B-Tree pour l'Université:Implémentation B-Tree - dois-je faire de la classe Node une classe membre statique ou pas?
J'ai une classe B-Tree "extérieur" avec des attributs racine et _degree. La classe pour représenter les nœuds est mis en œuvre en tant que classe statique membre:
public class BTree<E> {
private Node<E> root;
// the minimal degree
private int degree;
public BTree(int degree) {
if (degree < 2) {
throw new IllegalArgumentException();
}
this.degree = degree;
}
// other stuff
private static class Node<T> {
T[] elements = (T[])new Object[degree * 2 - 1];
Node<T>[] children = (Node<T>[])new Object[degree * 2];
int size = 0;
}
}
Donc, maintenant mon problème est: Comme je l'ai mis en œuvre la classe Node en tant que classe membre statique, je ne peux pas accéder à l'attribut degré de la classe extérieure.
Maintenant, je dois choix:
- Faire la classe Node une classe interne (classe membre non statique) OU
- Créez un constructeur pour la classe Node et passer le diplôme en chaque fois que je besoin pour construire un noeud.
Quel serait le meilleur choix? En faire une classe interne signifierait que les nœuds auraient tous une référence au Btree (classe externe), mais en faisant une classe membre statique, cela signifierait que je devrais passer le degré à chaque fois.
Est-il nécessaire que Node soit une classe interne? Avez-vous la liberté de changer le design du BTree? – athena
@athena J'ai la liberté mais j'aime utiliser des classes imbriquées pour encapsuler davantage ^^. – helpermethod