Java 中的数组数组

2022-08-30 22:59:44

这对我来说是一个令人讨厌的...我是一个在Java中从事JSP项目的PHP人。我知道如何通过太多的代码和完全缺乏技巧来做我正在尝试的事情。

我宁愿做对。情况如下:

我正在写一个小显示器,向客户展示他们可以根据浇水组(ABCDE)在草坪上浇水的日子以及一年中的什么时间。我们的季节是这样的:夏季(5-1至8-31)春季(3-1至4-30)秋季(9-1至10-31)冬季(11-1至2-28)

例如:

如果我在A组,这里将是我允许的时间:冬季:周一只有春季:周二,周四,周六夏季:任何一天秋季:周二,周四,周六

如果我用PHP写这个,我会使用这样的数组:

//M=Monday,t=Tuesday,T=Thursday.... etc
$schedule["A"]["Winter"]='M';
$schedule["A"]["Spring"]='tTS';
$schedule["A"]["Summer"]='Any';
$schedule["A"]["Fall"]='tTS';
$schedule["B"]["Winter"]='t';

我可以制作天数组(array(“Tuesday”,“Thursday”,“Saturday”))等,但对于我真正想要完成的事情来说,这不是必需的。

我还需要设置数组来确定我所在的季节:

$seasons["Summer"]["start"]=0501;
$seasons["Summer"]["end"]=0801;

任何人都可以建议一个非常酷的方法来做到这一点吗?我将有今天的日期和小组信。我需要在一天(M)或一系列日子(tTS)(Any)中退出我的功能。


答案 1

你可以用 Hashtables(或其他一些 Map)做基本上相同的代码:

Hashtable<String, Hashtable<String, String>> schedule
    = new Hashtable<String, Hashtable<String, String>>();
schedule.put("A", new Hashtable<String, String>());
schedule.put("B", new Hashtable<String, String>());
schedule.put("C", new Hashtable<String, String>());
schedule.put("D", new Hashtable<String, String>());
schedule.put("E", new Hashtable<String, String>());

schedule.get("A").put("Winter", "M");
schedule.get("A").put("Spring", "tTS");
// Etc...

没有那么优雅,但话说回来,Java不是一种动态语言,它在语言层面上没有哈希值。

注意:您也许能够做一个更好的解决方案,当我阅读您的问题时,这突然出现在我的脑海中。


答案 2

不要试图像PHP那样动态。您可以尝试首先定义您需要的内容。

interface Season
{
    public string getDays();
}

interface User
{
    public Season getWinter();
    public Season getSpring();
    public Season getSummer();
    public Season getFall();
}

interface UserMap
{
    public User getUser(string name);
}

在使用之前,请阅读Hashtable的文档。此类是同步的,这意味着每个调用都受到多线程保护,当您不需要额外的保护时,这确实会减慢访问速度。请使用任何Map实现,如HashMapTreeMap


推荐