我有一个列出该书的标题和出版年份的作者名单,例如:
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)并绘制所需的节点,然后在它们之间绘制一条边。