gpt4 book ai didi

java - 使用用户输入的字符串在 HashMap 中搜索关键字

转载 作者:行者123 更新时间:2023-11-30 08:07:32 27 4
gpt4 key购买 nike

我有一个 Java 作业,我们要使用 ArrayList 类编写书籍和期刊的“数据库”,将它们存储为 Reference 类型的对象。

这个作业的要求之一是我们将数据库中的书名拆分并保存到 HashMap 中,以便以后进行关键字搜索。

我的 hashmap 声明如下: private HashMap <String, Reference> titles = new HashMap <String,Reference> (10);

我通过测试知道我向 HashMap 添加标题和引用的方式有效。我的搜索功能不起作用。

private void searchBooks(String callNumber, String[] keywords, int startYear, int endYear) {
Set<String>commonKeys = new HashSet<String>();
for(int i = 0; i < keywords.length; i ++)
{
commonKeys.add(keywords[i]);
}
titles.keySet().retainAll(commonKeys);
System.out.println(titles);

这是我根据我的知识拼凑而成的代码,以及我能够在此站点的各种线程上找到的类似问题。

我这样做对吗?有什么我想念的吗?

最佳答案

假设您有两本书。一本名为“书一”,另一本名为“书二”。如果我对你的问题的理解正确,那么你正在使用如下内容填充标题映射。

for each title
split on " " character
titles.put(title word, reference to the book)

如果我没看错,问题不在于您的搜索代码,而在于标题对象本身的数据结构。如果我们通过我上面写的伪代码运行上面的例子,那么最后的 map 是什么样子的呢?

Book -> Book Two
One -> Book One
Two -> Book Two

现在,如果您搜索“Book”,您将获得所描述的行为。

你如何解决这个问题?您需要的不仅仅是一张简单的 map 。一个选项是列表映射,在您的情况下

Map<String, List<Reference>>

您将以与现在几乎相同的方式填充它,但不是

titles.put(title word, reference to the book)

你会这样做:

if (titles.containsKey(title word)) {
titles.get(title word).add(reference to the book);
} else {
titles.put(new List<Reference>() { reference to the book };
}

另一个选择是 GS Collections 库中的 Multimap 类,但上面的代码只是一个简单的起点。

关于java - 使用用户输入的字符串在 HashMap 中搜索关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33642631/

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