我有一个作者列表,其中包含书名和出版年份,例如:
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 映射)并绘制所需的节点,然后在它们之间画一条边。
关于java - 哪种数据结构来存储共同作者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7952378/