我有一个场景,需要存储数据层次结构列表的映射,以便在内存中进行处理。目前,我正在考虑将数据结构实现为
Map<Integer, Map<String, Map<Integer, List<String> > > >混凝土的类型是,
HashMap<stdIdInt, HashMap<libraryNameStr, HashMap<topicIdInt, ArrayList<bookNameStr> > > >由于我不需要维护任何特定的顺序,所以我也在考虑用Set (HashSet)代替Set,这可能会提高性能。
虽然我已经试过了,但我也认为使用谷歌的番石榴多机是可行的替代品,但我不确定。
背景:,我需要存储每个学生id的详细信息&他们感兴趣的图书名称信息,按主题类型分类,这些信息将由图书馆名称进一步组织。我需要处理数据和显示的图书名称,主要是通过学生的id,而其他时候,通过图书馆名称和主题类型。一旦图书名称显示给用户,我需要从图书名称列表中删除该条目。
数据结构需要以高速率保存和处理数千个条目,并将数据保存更长时间。
请提出一种更快处理的方法或另一种数据结构,以及关于数据结构/收集类的类型及其使用组合的。
(请注意,我上面描述的场景并不是确切的情况,但我尽力抽象了数据层次结构的复杂性)
发布于 2011-11-27 14:27:22
我想你错过了很多抽象概念。经验法则是:每次集合包含另一个集合时,都应该引入中间对象。
在您的例子中,这是我建议的OO设计:
class Student {
private int id;
private Map<Integer, Library> libraries;
private getLibrary(int id) {return libraries.get(id);}
}
class Library {
private int id;
private Map<Integer, Topic> topics;
private getTopic(int id) {return topics.get(id);}
}
class Topic {
private int id;
private Map<Integer, Book> books;
private getBook(int id) {return books.get(id);}
}
class Book {
private int id;
private String name;
}和用法:
Map<Integer, Student> students = //...
students.get(6).getLibrary(5).getTopic(4).getBook(3)当然,这段代码需要更多的改进。一行中不应该需要多个.。但它的可读性已经比:
students.get(6).get(5).get(4).get(3)https://stackoverflow.com/questions/8286023
复制相似问题