Java列表中的列表列表

时间:2012-08-28 08:40:09

标签: java list linked-list

我正在尝试存储民法西班牙语代码。

它以这种方式分开:

Books

----Chapters

--------Articles

OR

Books

----Titles

--------Chapters

-------------Articles

OR

Books

----Titles

--------Chapters

-------------Sections

-----------------Articles

书籍,标题,章节和章节必须存储int identifierString with the name of the booktitle等。元素的数量是可变的,因为有些书籍的章节多于其他书籍,例如。

Articles必须存储int identifierString文章内容。

我会建议一个结构的declaration and usage(数据,输出数据)的例子,因为(对我而言)它有点复杂。

3 个答案:

答案 0 :(得分:1)

为此使用类怎么样?好吧,一切都可以用原始类型和容器来实现,但为什么呢?它的可读性要低得多。

public class Book {
   private int id;
   private List<Chapter> chapters;
   private List<Title> titles;

   // getters/setters/constructor
}

public class Chapter {
   private int id;
   private List<Section> section;
   private List<Article> articles;

   // getters/setters/constructor
}

public class Title {
   private int id;
   private List<Chapter> chapters;

   // getters/setters/constructor
}

public class Section {
   private int id;
   private List<Article> articles;

   // getters/setters/constructor
}

对我而言,这是最简单的方法。 The Elite Gentleman的版本稍微复杂一些,但另一方面更改领域模型(增加新类型或改变关系)更加强大。

答案 1 :(得分:0)

而是创建节点的树结构,如下所示(这是一个可以帮助你的psedo代码):

public interface Node {
    public int getId();
    public String getName();

    public void saveTo(SaveVisitor visitor);
}

public abstract class AbstractNode {
    public List<Node> children;

    //Getters
    public List<Node> getChildren() { return children; }

    public void addChild(Node node) {
        if (children == null) {
            children = new ArrayList<Node>();
        }

        children.add(node);
    }

    @Override
    public void saveTo(SaveVisitor visitor) {
        if (visitor != null) {
            visitor.setId(getId());
            visitor.setName(getName());

            if (children != null) {
                for (Node child: children) {
                    child.saveTo(visitor);
                }
            }
        }
    }
}


public class Book extends AbstractNode {

}

public class Title extends AbstractNode {

}

public class Chapter extends AbstractNode {

}

public class Section extends AbstractNode {

}

public class Article extends AbstractNode {

}

您的SaveVisitor可以是任何接受IDName的访问者,子类可以是任何格式(XML,JSON,结构明文,Excel等)。< / p>

答案 2 :(得分:0)

我的建议是Map<Index, Entry>,其中Entry为文本(可能是简单的字符串或类似内容),Index存储坐标

class Index {
  public int book, title, chapter, section, article;
}

然后,您可以实现Index可比较(equals()/compareTo()),并可能提供一些导航到该书的方法(getNextChapter(Index)isLastArticle(Index)等。)

您也可以将这些辅助方法放入一个单独的类(如CivilSpanishCodeHandler)中,以保持干净。

此外,我会想到一个Tree因为它是最自然的表现形式。虽然我建议编写自己的树结构来将所有上述辅助方法实现到树中。