Java - 用于预订系统的 HashMap
Java - HashMap for booking system
我得到了一个练习来开发适当的数据结构来实施网球场预订系统。
为此需要哈希图,我得到了一张图表作为数据结构的可视化表示。
看图,我不清楚HashMap中的Key和Value应该怎么定义。 'Court' 应该是 class 吗?
对于值,它显示时间和玩家姓名。既然有时间和玩家姓名两个值,那么这个值怎么定义?
Date1(多好的名字)是 Map<String, Court>
个法院的名称,例如“court1”。法院有字段名称和保留列表。
所以键(可能)是一个字符串,而 class 本身就是值。人们经常看到,key/ID 也保存在值 class 中。所以一个Court对象就足以得名了。
为每个 Date1
创建一个 HashMap
是一种奇怪且令人困惑的方法,因为 HashMap
不能真正代表我们理解的日期。但鉴于这是作业,您必须保留有关球场编号、比赛时间和参赛者姓名的信息。这些至少是三个字段,如果我们将竞争对手的名字连接到一个 String
.
如果只使用 HashMap
你可能不得不使用 multi-dimensional HashMap
.
HashMap<Integer, HashMap<String, String>> Date1 = new HashMap<String, HashMap<String, String>>();
外部 HashMap
将 法院编号作为 type Integer
的键和 对作为 type[ 的值=44=] HashMap
。
内部 HashMap
将 playtime 保存为类型 String
的键(尽管您也可以使用类型 Time
)和 c参赛者姓名为类型值 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()
这样的机制时。在这里查看详细但易于理解的开始:
A Guide to Java HashMap
假设我们有一个名为“Date1”的 HashMap。
好吧,现在我可以在这个“Date1”HashMap 中放置一个带有键的值,然后可以使用键检索该值 -> Date1.get("key")
根据您的图表,按键将是 court1,court2,....
这样,当我请求 Date1.get("court1")
时,我可以得到 this ArrayList
但是,在这个数组列表中,每一行都包含两个值。如果我们的列表每一行都有一个字符串值,我们可以说这是一个字符串类型的数组列表。
所以让我们自己制作 class(比如一个类型),它可以存储两个值(比如“9:00”、“玩家”)
public class EntryInfo{
String time, player;
public EntryInfo(String time, String player) {
this.time = time;
this.player = player;
}
}
因此,如果我们创建一个“EntryInfo”对象 class,该对象将能够存储两个值 - 我们的数组列表的每一行都是这种类型。
所以,让我们总结一下:
我们的哈希映射键将是“court1, court2...”
每个键将保存 ArrayList<EntryInfo>
类型的值。
所以我们的 hashmap 会像 HashMap< String, ArrayList<EntryInfo> >
现在,让我们根据您的图表想象一下场景。
首先说说使用场景。
比如说,你们学校有几个法院。它们被命名为 court1, court2, court3, ...
好吧,我想要今天的 entry-log court1。
所以,我只要求 feb9.get("court1")
,它会 return 一个列表(ArrayList),我可以遍历该数组以查看日志,如下所示:
for(EntryInfo entryinfo : feb9.get("court1") ) {
System.out.println(entryinfo.time + " : " + entryinfo.player);
}
是的,就是这样。如果我想获取 court2 的日志,我将使用键“court2”检索值
现在,让我们讨论如何制作这个。
那么今天是 2 月 9 日,让我们制作一个 hashmap 来存储今天的登录日志。让我们将哈希图命名为“feb9”
HashMap<String, ArrayList<EntryInfo>> feb9 = new HashMap<String, ArrayList<EntryInfo>>();
你们学校有 3 个球场。让我们向这个 hashmap 添加 3 个不同的键,这样它可以为每个键(court)
保存 3 个独立且对应的 entry-logs
feb9.put("court1", new ArrayList<EntryInfo>());
feb9.put("court2", new ArrayList<EntryInfo>());
feb9.put("court3", new ArrayList<EntryInfo>());
您可以将此与创建 3 个名为 court1、court2 和 court3 的新文件联系起来。每个文件由一个 ArrayList 对象组成,目前是空的。
说,现在 9:00 上午,玩家“zineryt”进入 court1。让我们将日志输入我们的 hashmap
feb9.get("court1").add(new EntryInfo("9:00", "zineryt"));
这里feb9.get("court1")
会return一个ArrayList,我们使用add()方法向ArrayList中插入元素。
比如,在 9:50am,玩家“bigboy”进入 court1。我们可以像下面这样进入日志
feb9.get("court1").add(new EntryInfo("9:50", "bigboy"));
事情是这样的。
为了明天的信息,我们将创建另一个名为 feb10 的新 HashMap,并将遵循相同的步骤。
我得到了一个练习来开发适当的数据结构来实施网球场预订系统。
为此需要哈希图,我得到了一张图表作为数据结构的可视化表示。
看图,我不清楚HashMap中的Key和Value应该怎么定义。 'Court' 应该是 class 吗?
对于值,它显示时间和玩家姓名。既然有时间和玩家姓名两个值,那么这个值怎么定义?
Date1(多好的名字)是 Map<String, Court>
个法院的名称,例如“court1”。法院有字段名称和保留列表。
所以键(可能)是一个字符串,而 class 本身就是值。人们经常看到,key/ID 也保存在值 class 中。所以一个Court对象就足以得名了。
为每个 Date1
创建一个 HashMap
是一种奇怪且令人困惑的方法,因为 HashMap
不能真正代表我们理解的日期。但鉴于这是作业,您必须保留有关球场编号、比赛时间和参赛者姓名的信息。这些至少是三个字段,如果我们将竞争对手的名字连接到一个 String
.
如果只使用 HashMap
你可能不得不使用 multi-dimensional HashMap
.
HashMap<Integer, HashMap<String, String>> Date1 = new HashMap<String, HashMap<String, String>>();
外部 HashMap
将 法院编号作为 type Integer
的键和 对作为 type[ 的值=44=] HashMap
。
内部 HashMap
将 playtime 保存为类型 String
的键(尽管您也可以使用类型 Time
)和 c参赛者姓名为类型值 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()
这样的机制时。在这里查看详细但易于理解的开始:
A Guide to Java HashMap
假设我们有一个名为“Date1”的 HashMap。
好吧,现在我可以在这个“Date1”HashMap 中放置一个带有键的值,然后可以使用键检索该值 -> Date1.get("key")
根据您的图表,按键将是 court1,court2,....
这样,当我请求 Date1.get("court1")
时,我可以得到 this ArrayList
但是,在这个数组列表中,每一行都包含两个值。如果我们的列表每一行都有一个字符串值,我们可以说这是一个字符串类型的数组列表。
所以让我们自己制作 class(比如一个类型),它可以存储两个值(比如“9:00”、“玩家”)
public class EntryInfo{
String time, player;
public EntryInfo(String time, String player) {
this.time = time;
this.player = player;
}
}
因此,如果我们创建一个“EntryInfo”对象 class,该对象将能够存储两个值 - 我们的数组列表的每一行都是这种类型。
所以,让我们总结一下:
我们的哈希映射键将是“court1, court2...”
每个键将保存 ArrayList<EntryInfo>
类型的值。
所以我们的 hashmap 会像 HashMap< String, ArrayList<EntryInfo> >
现在,让我们根据您的图表想象一下场景。
首先说说使用场景。 比如说,你们学校有几个法院。它们被命名为 court1, court2, court3, ...
好吧,我想要今天的 entry-log court1。
所以,我只要求 feb9.get("court1")
,它会 return 一个列表(ArrayList),我可以遍历该数组以查看日志,如下所示:
for(EntryInfo entryinfo : feb9.get("court1") ) {
System.out.println(entryinfo.time + " : " + entryinfo.player);
}
是的,就是这样。如果我想获取 court2 的日志,我将使用键“court2”检索值
现在,让我们讨论如何制作这个。
那么今天是 2 月 9 日,让我们制作一个 hashmap 来存储今天的登录日志。让我们将哈希图命名为“feb9”
HashMap<String, ArrayList<EntryInfo>> feb9 = new HashMap<String, ArrayList<EntryInfo>>();
你们学校有 3 个球场。让我们向这个 hashmap 添加 3 个不同的键,这样它可以为每个键(court)
保存 3 个独立且对应的 entry-logsfeb9.put("court1", new ArrayList<EntryInfo>());
feb9.put("court2", new ArrayList<EntryInfo>());
feb9.put("court3", new ArrayList<EntryInfo>());
您可以将此与创建 3 个名为 court1、court2 和 court3 的新文件联系起来。每个文件由一个 ArrayList 对象组成,目前是空的。
说,现在 9:00 上午,玩家“zineryt”进入 court1。让我们将日志输入我们的 hashmap
feb9.get("court1").add(new EntryInfo("9:00", "zineryt"));
这里feb9.get("court1")
会return一个ArrayList,我们使用add()方法向ArrayList中插入元素。
比如,在 9:50am,玩家“bigboy”进入 court1。我们可以像下面这样进入日志
feb9.get("court1").add(new EntryInfo("9:50", "bigboy"));
事情是这样的。
为了明天的信息,我们将创建另一个名为 feb10 的新 HashMap,并将遵循相同的步骤。