我有一个列出该书的标题和出版年份的作者名单,例如:


Brian Goetz,Tim Peierls,Joshua Bloch,Joseph Bowbeer,David Holmes,Doug Lea:Java并发实践,2006年

Ken Arnold,James Gosling和David Holmes:Java编程语言,2005年

...


我想知道哪种数据结构最适合存储有关共同作者,他们在一起写的书以及出版年份的信息。

我想稍后使用此信息绘制图形(在JUNG中,我使用的是Java),其中每个作者都是节点,边缘是他们共同创作的每一本书。每年将绘制单独的图表。我在考虑使用多图:

Map<Year, Map<Author, List<Map<Co-author, Title>>>>


但这可能太复杂了吗?

在此先感谢您的帮助。

最佳答案

如何将一组作者和标题放在一个名为“ Book”的对象中?这样,您的数据结构可以很简单

class Book {
    List<Author> authors;
    Title title;
}

Map<Year, Set<Book>> booksInYears


图形绘制算法可以像这样工作:

for (Book book : booksInYears.get(aYear))
    for (Author author1 : book.authors)
        for (Author author2 : book.authors)
            if (author1 != author2)
                drawEdge(author1, author2, book.title);


drawEdge方法将首先检查两个作者是否已经绘制了相应的节点(例如,使用包含具有已绘制节点的作者的集合,或者使用Author => Node map)并绘制所需的节点,然后在它们之间绘制一条边。

07-28 01:19
查看更多