Java哈希映射搜索
作为一个正在进行的类项目的一部分,我们被要求实现映射以实现更好的对象链接 简而言之,我们目前有四个保存对象的ArrayListJava哈希映射搜索,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<
// 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所做的 是的,如果是的话