Java哈希映射搜索

Java哈希映射搜索,java,hashmap,Java,Hashmap,作为一个正在进行的类项目的一部分,我们被要求实现映射以实现更好的对象链接 简而言之,我们目前有四个保存对象的ArrayList // Array Lists used for sorting. private static ArrayList<Party> partyList = new ArrayList<Party>(); private static ArrayList<Creature> creatureList = new ArrayList<

作为一个正在进行的类项目的一部分,我们被要求实现映射以实现更好的对象链接

简而言之,我们目前有四个保存对象的ArrayList

// Array Lists used for sorting.
private static ArrayList<Party> partyList = new ArrayList<Party>();
private static ArrayList<Creature> creatureList = new ArrayList<Creature>();
private static ArrayList<Treasure> treasureList = new ArrayList<Treasure>();
private static ArrayList<Artifact> artifactList = new ArrayList<Artifact>();
我们的程序也允许搜索。所以我明白了,现在当我们通过索引搜索时,我们只需搜索适当的hashmap来获得我们想要的索引,然后处理作为其值的对象

然而,我们的程序也允许用户按姓名、身高、体重等进行搜索。那么,如果hashmaps只在按索引搜索时有用,那么它在这里是如何有效使用的呢?如果我想按名字搜索一个生物会怎么样?我必须遍历hashmap中的每个值,查看它的“name”字段。这正是我使用arraylist所做的

当有人问类似的问题时,我们的教授说:

这个想法是,在第一个项目中,简单的方法是 将所有项目插入数组列表,并在需要链接 一方的生物,或是一个生物的物品,你必须 线性搜索ArrayList,直到找到该项的索引。 如果ArrayList未排序,则这是O(n)操作,而O(log n) 如果列表已排序,但排序通常为O(n*n),则操作 或O(n log n),具体取决于所使用的排序操作

本周,我要求您实现一个基于 在地图数据结构上。因此,我们应该使用项目的索引作为 它的关键是生成链接。这在处理过程中使用一次 输入文件


因此,我不确定自己是否正确理解了映射/键值对的概念。

您的理解是正确的:如果您的键是索引,则只能使用映射按索引高效查找。如果要按名称搜索,则必须键入名称

我不太清楚你的教授是什么意思:

因此,我们应该使用项目的索引作为其键来生成链接

(我认为他指的是通过索引链接对象,如“将生物链接到一个团队”——也许他没有提到使用哈希图进行搜索)

另一方面,最好根据接口而不是具体类型声明变量。在您的示例中,您应该将列表字段定义为
list
,而不是
ArrayList

private static List<Party> partyList = new ArrayList<Party>();
private static List partyList=new ArrayList();

您的理解是正确的:如果您的键是索引,则只能使用映射按索引高效查找。如果要按名称搜索,则必须键入名称

我不太清楚你的教授是什么意思:

因此,我们应该使用项目的索引作为其键来生成链接

(我认为他指的是通过索引链接对象,如“将生物链接到一个团队”——也许他没有提到使用哈希图进行搜索)

另一方面,最好根据接口而不是具体类型声明变量。在您的示例中,您应该将列表字段定义为
list
,而不是
ArrayList

private static List<Party> partyList = new ArrayList<Party>();
private static List partyList=new ArrayList();

按顺序浏览您的问题(和陈述)

所以我知道现在当我们通过索引搜索时,我们只是搜索 为我们想要的索引创建适当的hashmap,并使用 对象的值

这是正确的

然而,我们的程序也允许用户按姓名、身高、体重等进行搜索。那么,如果hashmaps只在按索引搜索时有用,那么它在这里是如何有效使用的呢

如果您的hashmap仅按索引存储,那么您可以确定它不帮助您按任何其他字段进行搜索。你也可以为这些领域创建一个地图,但我认为这不是你的教授想要的(见下文)

如果我想按名字搜索一个生物会怎么样?我必须遍历hashmap中的每个值,查看它的“name”字段。这正是我使用arraylist所做的

是的,如果您需要按名称搜索,那么您可以使用
values()
方法并遍历该方法,检查每个项目

当一个人需要将一个生物链接到一个团队,或一个物品链接到一个生物时,他必须线性搜索ArrayList,直到找到物品的索引

因此,我们应该使用项目的索引作为其键来生成链接。这在处理输入文件期间使用一次

这对我来说意味着作业还有另一部分——从文件中读取输入,并将各方、生物和项目链接在一起

我假设双方的输入文件通过
索引
引用生物(对于引用项目的生物也是如此)。
教授希望您通过使用这些哈希图来加速这种链接。
我不认为他想让你改变其他搜索方式


(显然这是一个猜测,因为我不知道作业实际上说了些什么)

按照顺序浏览你的问题(和陈述)

所以我知道现在当我们通过索引搜索时,我们只是搜索 为我们想要的索引创建适当的hashmap,并使用 对象的值

这是正确的

然而,我们的程序也允许用户按姓名、身高、体重等进行搜索。那么,如果hashmaps只在按索引搜索时有用,那么它在这里是如何有效使用的呢

如果您的hashmap仅按索引存储,那么您可以确定它不帮助您按任何其他字段进行搜索。你也可以为这些领域创建一个地图,但我认为这不是你的教授想要的(见下文)

如果我想按名字搜索一个生物会怎么样?我必须遍历hashmap中的每个值,查看它的“name”字段。这正是我使用arraylist所做的

是的,如果是的话