首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更好的数据结构,以便更快地读取列表地图

更好的数据结构,以便更快地读取列表地图
EN

Stack Overflow用户
提问于 2011-11-27 13:50:38
回答 1查看 505关注 0票数 0

我有一个场景,需要存储数据层次结构列表的映射,以便在内存中进行处理。目前,我正在考虑将数据结构实现为

代码语言:javascript
复制
Map<Integer, Map<String, Map<Integer, List<String> > > >

混凝土的类型是,

代码语言:javascript
复制
HashMap<stdIdInt, HashMap<libraryNameStr, HashMap<topicIdInt, ArrayList<bookNameStr> > > >

由于我不需要维护任何特定的顺序,所以我也在考虑用Set (HashSet)代替Set,这可能会提高性能。

虽然我已经试过了,但我也认为使用谷歌的番石榴多机是可行的替代品,但我不确定。

背景:,我需要存储每个学生id的详细信息&他们感兴趣的图书名称信息,按主题类型分类,这些信息将由图书馆名称进一步组织。我需要处理数据和显示的图书名称,主要是通过学生的id,而其他时候,通过图书馆名称和主题类型。一旦图书名称显示给用户,我需要从图书名称列表中删除该条目。

数据结构需要以高速率保存和处理数千个条目,并将数据保存更长时间。

请提出一种更快处理的方法或另一种数据结构,以及关于数据结构/收集类的类型及其使用组合的

(请注意,我上面描述的场景并不是确切的情况,但我尽力抽象了数据层次结构的复杂性)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-27 14:27:22

我想你错过了很多抽象概念。经验法则是:每次集合包含另一个集合时,都应该引入中间对象。

在您的例子中,这是我建议的OO设计:

代码语言:javascript
复制
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;
}

和用法:

代码语言:javascript
复制
Map<Integer, Student> students = //...
students.get(6).getLibrary(5).getTopic(4).getBook(3)

当然,这段代码需要更多的改进。一行中不应该需要多个.。但它的可读性已经比:

代码语言:javascript
复制
students.get(6).get(5).get(4).get(3)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8286023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档