首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java - HashMap预订系统

Java - HashMap预订系统
EN

Stack Overflow用户
提问于 2022-02-09 12:13:00
回答 3查看 249关注 0票数 0

我已获授权发展适当的数据结构,以推行网球场订位系统。

哈希映射是需要的,我得到了一个图表,作为数据结构的可视化表示。

从图表来看,我不清楚如何在HashMap中定义键和值。“法庭”应该是一门课,哪一门课是关键?

对于这个值,它显示一个时间和一个玩家的名字。如何定义值,因为它有两个值时间和球员名称?

图链

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-02-09 12:56:20

假设我们有一个名为“HashMap”的Date1。现在,我可以在这个"Date1“HashMap中放置一个带有键的值&稍后可以使用键-> Date1.get("key")检索该值。

根据你的图表,键是court1,court2,.

所以,当我想要Date1.get("court1")的时候,我可以得到这个ArrayList

但是,在这个数组列表中,每一行由两个值组成。如果我们的列表在每一行中有一个字符串值,我们可以说这是一个字符串类型的数组列表。

因此,让我们创建我们自己的类(就像一个类型),它可以存储两个值(比如"9:00","player")

代码语言:javascript
复制
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),我可以遍历这个数组来查看日志,如下所示:

代码语言:javascript
复制
for(EntryInfo entryinfo : feb9.get("court1") ) {
    System.out.println(entryinfo.time + " : " + entryinfo.player);
}

是的,就这样。如果我想获取court2的日志,我将使用键"court2“检索该值。

现在,让我们来讨论如何做这个。

今天是feb9,让我们制作一个hashmap来存储今天的入口日志。让我们将hashmap命名为"feb9“。

代码语言:javascript
复制
HashMap<String, ArrayList<EntryInfo>> feb9 = new HashMap<String, ArrayList<EntryInfo>>();

你们学校有三个法庭。让我们为这个hashmap添加3个不同的键,这样它就可以为每个键保存3个单独的和相应的输入日志(法庭)。

代码语言:javascript
复制
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。

代码语言:javascript
复制
feb9.get("court1").add(new EntryInfo("9:00", "zineryt"));

在这里,feb9.get("court1")将返回一个ArrayList,我们使用add()方法将元素插入到ArrayList中。

比方说,上午9点50分,玩家“大男孩”进入court1。我们可以像下面这样输入日志

代码语言:javascript
复制
feb9.get("court1").add(new EntryInfo("9:50", "bigboy"));

就像这样。

关于明天的信息,我们将创建另一个名为HashMap的新feb10,并将遵循相同的步骤。

票数 0
EN

Stack Overflow用户

发布于 2022-02-09 12:26:49

Date1 (什么名字)是法院名称的Map<String, Court>,如"court1“。法院有字段名和预定名单。

所以键是(可能)一个字符串,类本身就是值。人们经常看到,键/ID也保存在value类中。所以一个法庭的对象就足以得到它的名字了。

票数 0
EN

Stack Overflow用户

发布于 2022-02-09 12:55:19

为每个HashMap创建一个Date1是一种奇怪而又令人困惑的方法,因为HashMap不能真正代表我们所理解的日期。但鉴于这是任务,你必须保存关于球场号码,比赛时间和竞争对手名字的信息。如果我们把竞争对手的名字连到一个String上,至少有三个字段。

如果只使用HashMap,您可能需要使用多维HashMap

代码语言:javascript
复制
HashMap<Integer, HashMap<String, String>> Date1 = new HashMap<String, HashMap<String, String>>();

外部HashMap将法庭号作为Integer类型的键,将配对作为HashMap类型的值。内部HashMap将播放时间作为String类型的键(尽管您也可以使用Time类型),竞争对手将其命名为String类型的值。

在创建该程序时,必须生成附加访问器,以避免Date1.get(someIntVariable).get(someStringOrTime)冗长的链式调用来接收播放机名称。

代码语言:javascript
复制
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指南

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71049411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档