gpt4 book ai didi

java - 更好的数据结构,可以更快地读取 Map of Map of Map of Lists

转载 作者:行者123 更新时间:2023-12-02 00:33:55 24 4
gpt4 key购买 nike

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

Map<Integer, Map<String, Map<Integer, List<String> > > >

具体类型是,

HashMap<stdIdInt, HashMap<libraryNameStr, HashMap<topicIdInt, ArrayList<bookNameStr> > > >

由于我不需要维护任何特定的顺序,因此我也在考虑将 List 替换为 Set (HashSet),这可能可以提高性能。

虽然我到目前为止已经尝试过了,但我也想使用Google的Guava Multimap是一个可行的替代方案,但我不确定。

背景:我需要存储每个学生id及其感兴趣的详细信息>书籍名称主题类型分类的信息将按图书馆名称进一步组织。我需要处理数据并显示图书名称,主要按学生 ID,有时按图书馆名称和主题类型。一旦向用户显示了书名,我就需要从书名列表中删除该条目。

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

请建议一种方法或另一种数据结构以加快处理速度,以及数据结构/集合类的类型及其使用组合。

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

最佳答案

我认为你在这里遗漏了很多抽象概念。经验法则是:每次一个集合保存另一个集合时,都应该引入中间对象

对于你的情况,这是我建议的面向对象设计:

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)

关于java - 更好的数据结构,可以更快地读取 Map of Map of Map of Lists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8286023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com