我已获授权发展适当的数据结构,以推行网球场订位系统。
哈希映射是需要的,我得到了一个图表,作为数据结构的可视化表示。
从图表来看,我不清楚如何在HashMap中定义键和值。“法庭”应该是一门课,哪一门课是关键?
对于这个值,它显示一个时间和一个玩家的名字。如何定义值,因为它有两个值时间和球员名称?
发布于 2022-02-09 12:56:20
假设我们有一个名为“HashMap”的Date1。现在,我可以在这个"Date1“HashMap中放置一个带有键的值&稍后可以使用键-> Date1.get("key")检索该值。
根据你的图表,键是court1,court2,.
所以,当我想要Date1.get("court1")的时候,我可以得到这个ArrayList
但是,在这个数组列表中,每一行由两个值组成。如果我们的列表在每一行中有一个字符串值,我们可以说这是一个字符串类型的数组列表。
因此,让我们创建我们自己的类(就像一个类型),它可以存储两个值(比如"9:00","player")
public class EntryInfo{
String time, player;
public EntryInfo(String time, String player) {
this.time = time;
this.player = player;
}
}因此,如果我们创建一个"EntryInfo“类的对象,该对象将能够存储两个值--而且我们的数组列表中的每一行都是这种类型的。
因此,让我们总结一下:
我们的hashmap键将是"court1,court2.“每个键将保存ArrayList<EntryInfo>类型的值。
所以我们的hashmap会像HashMap< String, ArrayList<EntryInfo> >一样
现在,让我们根据您的图表来想象一下这个场景。
首先,让我们谈谈使用场景。你的学校里有几个法庭。他们被命名为court1,court2,court3,.
好吧,我要court1今天的登录日志。因此,我将只请求feb9.get("court1"),它将返回一个list (ArrayList),我可以遍历这个数组来查看日志,如下所示:
for(EntryInfo entryinfo : feb9.get("court1") ) {
System.out.println(entryinfo.time + " : " + entryinfo.player);
}是的,就这样。如果我想获取court2的日志,我将使用键"court2“检索该值。
现在,让我们来讨论如何做这个。
今天是feb9,让我们制作一个hashmap来存储今天的入口日志。让我们将hashmap命名为"feb9“。
HashMap<String, ArrayList<EntryInfo>> feb9 = new HashMap<String, ArrayList<EntryInfo>>();你们学校有三个法庭。让我们为这个hashmap添加3个不同的键,这样它就可以为每个键保存3个单独的和相应的输入日志(法庭)。
feb9.put("court1", new ArrayList<EntryInfo>());
feb9.put("court2", new ArrayList<EntryInfo>());
feb9.put("court3", new ArrayList<EntryInfo>());您可以将此与创建3个名为court1、court2和court3的新文件联系起来。每个文件都由一个ArrayList对象组成,该对象目前为空。
比如说,现在9点,玩家"zineryt“进入court1。让我们将日志输入到hashmap。
feb9.get("court1").add(new EntryInfo("9:00", "zineryt"));在这里,feb9.get("court1")将返回一个ArrayList,我们使用add()方法将元素插入到ArrayList中。
比方说,上午9点50分,玩家“大男孩”进入court1。我们可以像下面这样输入日志
feb9.get("court1").add(new EntryInfo("9:50", "bigboy"));就像这样。
关于明天的信息,我们将创建另一个名为HashMap的新feb10,并将遵循相同的步骤。
发布于 2022-02-09 12:26:49
Date1 (什么名字)是法院名称的Map<String, Court>,如"court1“。法院有字段名和预定名单。
所以键是(可能)一个字符串,类本身就是值。人们经常看到,键/ID也保存在value类中。所以一个法庭的对象就足以得到它的名字了。
发布于 2022-02-09 12:55:19
为每个HashMap创建一个Date1是一种奇怪而又令人困惑的方法,因为HashMap不能真正代表我们所理解的日期。但鉴于这是任务,你必须保存关于球场号码,比赛时间和竞争对手名字的信息。如果我们把竞争对手的名字连到一个String上,至少有三个字段。
如果只使用HashMap,您可能需要使用多维HashMap。
HashMap<Integer, HashMap<String, String>> Date1 = new HashMap<String, HashMap<String, String>>();外部HashMap将法庭号作为Integer类型的键,将配对作为HashMap类型的值。内部HashMap将播放时间作为String类型的键(尽管您也可以使用Time类型),竞争对手将其命名为String类型的值。
在创建该程序时,必须生成附加访问器,以避免Date1.get(someIntVariable).get(someStringOrTime)冗长的链式调用来接收播放机名称。
public HashMap<String, String> getPairingsForCourt(int court) {
return Date1.get(court);
}
public String getPlayersForCourtOnTime(int court, String time) {
return getPairingsForCourt(court).get(time);
}无论如何,熟悉HashMap的所有方面都需要一些时间。特别是当您遇到像keySet()或entrySet()这样的机制时。在这里查看一个详细但可以理解的起点:Java HashMap指南
https://stackoverflow.com/questions/71049411
复制相似问题