【问题标题】:What is the Fastest way to reorder an array重新排序数组的最快方法是什么
【发布时间】:2013-10-06 21:41:38
【问题描述】:

在 JAVA 中重新排序(新索引始终相同)数组的最快(实时数据处理应用程序)方法是什么:

例如: 我有: double[] A = new double[] {1, 234, 12,99,0};

我需要快点: double[] B = new double[] {A[2], A[4], A[0],A[1],A[3]};

但也许这是最有效的方法?

非常感谢您的反馈

【问题讨论】:

  • 你目前的方法是不是太慢了?
  • 您可以在这两个地方删除 new double[],但我不明白您希望如何做得比这更好,或者为什么您认为它可能是代码瓶颈,或者,如果您不这样做't,你为什么在乎呢。

标签: java arrays


【解决方案1】:

我怀疑你能比你目前的方法做得更好

double[] B = new double[] {A[2], A[4], A[0], A[1], A[3]};

其他序列的可能候选者可能是 Arrays.copyOfArrays.copyOfRange 的形式,但您必须在此处完成的最少工作量包括:

  • 创建一个新数组
  • 随机访问数组中的每个元素

您可能会在非常具体的读/写顺序(以利用缓存行)上做得稍微好一些,一种猜测是完全按顺序读取并按升序写入几乎整个:

   double[] B = new double[A.length];
   B[2] = A[0];
   B[3] = A[1];
   B[4] = A[3];
   B[0] = A[2];
   B[1] = A[4];

但我并没有强烈期望这会明显好转。如果您正试图消除或优化 L1/L2 缓存命中,那么是时候开始进行微基准测试了,真正的答案是您应该进行试验。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多