代码之家  ›  专栏  ›  技术社区  ›  Aravind Yarram

calendar.getInstance()或calendar.clone()

  •  30
  • Aravind Yarram  · 技术社区  · 16 年前

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

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

    newTime=originalDate.clone();
    

    表演是这里的主要内容。

    谢谢。

    5 回复  |  直到 16 年前
        1
  •  42
  •   Huy Tower TWilly    9 年前

    我会用

    newTime= (Calendar) originalDate.clone();
    
        2
  •  32
  •   Chris Lercher    16 年前
    1. 我的直觉告诉我,克隆人()会更快。
    2. 为什么不用一个快速的基准[*]来尝试呢?
    3. 考虑只使用长期价值 date.getTime() ,如果您不必进行日历计算。

    [*]

    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
    

    Calendar ,或 Date ,所以请随意修改测试。。。

        3
  •  2
  •   johannesemden    10 年前

    在斯卡拉我会做一个 克隆() 和一个日历演员 .asInstanceOf[日历] 比如:

    val now = Calendar.getInstance()
    val newDate = now.clone().asInstanceOf[Calendar]
    
        4
  •  1
  •   nahojkap    16 年前

    我的方法是选择选项1),然后确保彻底分析应用程序以检查瓶颈。可能上面的代码对应用程序的整体性能根本不是问题。

        5
  •  1
  •   user207421    16 年前

    你当然不能。Java中没有这样的东西。但我会重新考虑这个要求。什么是 实际的 如果你一直在传递同一个日期,会有人修改日期的风险吗?你能控制吗?e、 g.在每次调用之前和之后检查getTime(),如果发生变化则抛出一个RTE?