gpt4 book ai didi

java:使用 hashmap 或其他一些 java 集合创建查找表?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:27 25 4
gpt4 key购买 nike

Extending this question ,我接受了一个答案,其中说在这种情况下使用查找表或散列图,因为它会是一个更好的构造来处理多个条件

当前构造。

Class to store messages.

    public class ProgressMessages 
{
public static String msg1="Welcome here .....";
.
.
.
//around 100 more similar static variables.
}

Condition and Display the proper message from the above class.

    int x=calculatedVal1(m,n); 
int y=calculatedVal2(o,q);

SimpleDateFormat formater=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d=new Date();
String s=formater.format(d);

try {
long d1 = formater.parse("2013-01-10 13:53:01").getTime();
long d2=formater.parse(s).getTime();
totaldays=Math.abs((d1-d2)/(1000*60*60*24));
} catch (ParseException e) {
e.printStackTrace();
}

if(totaldays<7&&x<20)
{
System.out.println("my message...1"+ProgressMessages.msg1);
}

else if(totaldays<7&&x>10&&y<20)
{
System.out.println("my message...2"+ProgressMessages.msg2);
}
....
//obvioulsy 100 more else-if's to display 100 messages.

I actually would like to know how would a look-up table help in this case?

java Hashmap/Hashtable等应该怎么实现,怎么实现有什么好处?

----编辑---

我将通过@assylias anwer 进行回答,因为应用起来更干净。但是,如果我使用 Enums,那么我就有了解决办法。

描述大局...

即消息列表就像...

1) "欢迎光临,"+ nameOfUser+"你的成功率是"+ succsRate +"%"+之前是+earlier +"%"。

2) “哦,是的..”+ succsRate +“%”+ 从 +earlier +“%” 改进。

3.) “现在你应该专注于”+exerCiseName。

我如何使用 Enumeration 执行此操作,因为它具有固定的字符串数据。我可以制作不同的构造函数吗?任何带有 assylas 编辑代码的示例如何回答?

最佳答案

假设消息列表在编译时已知,您可以使用枚举。优点是现在每条消息都负责保存它的条件,调用代码会简单得多。

public enum Message {

MESSAGE1("Welcome") {
@Override
boolean isApplicable(long totalDays, int x, int y) {
return totalDays < 7 && x < 20;
}
},
MESSAGE2("Bye bye") {
@Override
boolean isApplicable(long totalDays, int x, int y) {
return totalDays < 7 && x > 10 && y < 20;
}
};

private String msg;

Message(String msg) {
this.msg = msg;
}

abstract boolean isApplicable(long totalDays, int x, int y);

public static String lookupMessage(long totalDays, int x, int y) {
for (Message m : Message.values()) {
if (m.isApplicable(totalDays, x, y)) {
return m.msg;
}
}
throw new IllegalArgumentException();
}
}

现在在你的调用代码中,不再有 if/else if,只有一行代码:

System.out.println(Message.lookupMessage(1, 2, 3));

注意 1:这不如使用 Map 高效,因为查找是一个 O(n) 操作,但是因为 n 是 100 左右,所以它不应该是一个显着的性能损失。而且它比其他答案中提出的解决方案更具可读性和可维护性。

注意 2:您甚至可以将条件/消息放在平面文件中,在运行时读取文件并使用脚本引擎在运行时评估每个条件。它会稍微慢一些(但我们在这里谈论的是亚毫秒),但会从您的代码中删除所有困惑并将其放入配置文件中。

关于java:使用 hashmap 或其他一些 java 集合创建查找表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14252822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com