我需要创建一个用于改组的种子,种子应该基于一个 id(int)和当前日期(没有时间)。这是为了保留一天的 id 排序并在第二天更改它。我现在有以下方法:
private static long getSeedForShuffle(int id)
{
Date date = new Date();
Calendar cal = MyConstants.UTC_CALENDAR;
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
double seed = id * 1e8 + year * 1e4 + month * 1e2 + day;
return (long) seed;
}
这在 MyConstants 中:
public class MyConstants {
public static final Calendar UTC_CALENDAR = Calendar.getInstance(TimeZone
.getTimeZone("UTC"));
}
有什么方法可以避免每次调用该方法时都创建新的日期对象?即有比做更好的事情吗
Date date = new Date();
在该getSeedForShuffle
方法中,由于该方法只需要当前的日期、月份和年份,原则上每天只能生成一次吗?
注意:此代码在 Web 应用程序中运行。
(在阅读 Effective Java Item 5:避免创建不必要的对象后开始思考这个问题。)