繁体   English   中英

calendar.getInstance()或calendar.clone()

[英]calendar.getInstance() or calendar.clone()

我需要复制一个给定日期100次(我不能通过参考传递)。 我想知道下面哪两个是更好的选择

newTime=Calendar.getInstance().setTime(originalDate);

要么

newTime=originalDate.clone();

表演在这里是主要的。

谢谢。

我会用

newTime= (Calendar) originalDate.clone();
  1. 我的直觉告诉我,clone()会更快。
  2. 为什么不试试快速基准[*]?
  3. 如果您不必进行日历计算,请考虑仅使用date.getTime()的long值。

[*]

private static final int N = 100000;

public static void main(final String[] args) throws Exception {

    final Date date = new Date();

    {
        final long start = System.currentTimeMillis();
        for (int i = 0; i < N; i ++) {
            final Date date2 = (Date) date.clone();
        }
        final long end = System.currentTimeMillis();
        System.out.println("Clone: " + (end - start) + " ms");
    }
    {
        final long start = System.currentTimeMillis();
        for (int i = 0; i < N; i ++) {
            final Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            final Date date2 = cal.getTime();
        }
        final long end = System.currentTimeMillis();
        System.out.println("Caldendar.setTime: " + (end - start) + " ms");
    }
}

结果:

Clone: 13 ms
Caldendar.setTime: 317 ms

PS我不确定,如果你真的需要一个CalendarDate ,所以随时修改测试...

(回应评论:为了提高测试准确性,您还可以单独运行测试,增加N的值,......)

在Scala中,我会使用.asInstanceOf [Calendar]执行clone()强制转换为Calendar,如:

val now = Calendar.getInstance()
val newDate = now.clone().asInstanceOf[Calendar]

我的方法是选择1),然后确保对应用程序进行全面分析以检查瓶颈。 可能是上述代码在一天结束时在应用程序的整体性能方面根本不是问题。

我无法通过参考传递

你肯定不能。 Java中没有这样的东西。 但我会审查这个要求。 如果您一直绕过同一个日期,有人会修改日期的实际风险是多少? 你能控制一下吗? 例如,通过在每次调用之前和之后检查getTime(),并在它发生变化时抛出RTE?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM