【问题标题】:Java How to copying larger array to the small array?Java如何将较大的数组复制到小数组?
【发布时间】:2017-04-05 18:00:52
【问题描述】:

我想复制一个较大的数组,其中一些元素通过remove() 方法随机删除到一个小数组中。

我使用过System.arraycopy(),但这种方法分别复制元素。因此,较大数组中的某些元素不会被复制。

我想将较大数组的所有未删除元素复制到长度等于较大数组中未删除元素数的小数组中。

【问题讨论】:

  • 为什么不在大数组中随机添加个元素到小数组中呢?
  • 感谢您的回答。这真是个好主意,但我刚刚尝试过,但我做不到。你能告诉我怎么做吗?
  • 欢迎来到 Stack Overflow。通常我们要求提问者首先展示一次尝试,或者至少记录完成的搜索和研究。这并不严格,因为当我们更清楚地了解您面临的挑战时,指导您会容易得多。
  • 一个想法,使用ArrayList而不是数组,当元素被删除时它会缩小,你最终会得到一个更小的ArrayList。另一个想法,创建一个流,过滤掉移除的元素并将剩余的元素收集到一个新的数组中。
  • 我猜您是在将“已接受”标记从一个答案移到另一个答案...不小心?

标签: java arrays copy


【解决方案1】:

如果你被允许使用其他“系统库”,解决方案超级简单:

  • Shuffle 大数组(或它的副本;如果您必须按原样保留大数组)
  • 使用arraycopy()并将smaller.length元素从larger复制到smaller

重点是:shuffle大数组的时候,是随机排列的!

但如果您不允许使用“系统”库;你自己“洗牌”:

  • 迭代larger;并且对于每次迭代,在larger.length 内计算一个随机 int
  • 用随机选择的索引交换当前迭代的元素

之后,您可以再次使用arraycopy。

【讨论】:

  • 请出示代码。我无法正确获取它。
  • 我没有故意显示代码。我认为这是某种家庭作业;而且您不会向其他做作业的人学习。但我还添加了另一个建议,可以归结为两行代码......
【解决方案2】:
import java.util.concurrent.ThreadLocalRandom;  //for shuffling array
import java.util.Random;                        //for shuffling solution

public class BigToSmallArray    {
    public static void main(String[] args)  {
        int[] bigArray = new int[]{0,1,2,3,4,5,6,7,8,9};
        int[] smallArray = new int[5];
        int[] shuffledBigArray = shuffleArray(bigArray);
        for(int i = 0; i < smallArray.length; i++)  {
            smallArray[i] = shuffledBigArray[i];
        }
    }

    public static int[] shuffleArray(int arr[])   {
        Random rnd = ThreadLocalRandom.current();
        for (int i = arr.length - 1; i > 0; i--) {
            int index = rnd.nextInt(i + 1);
            // Simple swap
            int a = arr[index];
            arr[index] = arr[i];
            arr[i] = a;
        }
        return arr;
    }
}

【讨论】:

  • 感谢您的大力帮助。这对我有用:)
  • @M.Aktas 没问题。祝你好运:)
  • @M.Aktas 或者如果您转换为使用 ArrayLists,则有一种方法可以对 ArrayList 中的元素进行洗牌,但我不记得确切的方法名称,您可以在 API 上查找。跨度>
猜你喜欢
  • 1970-01-01
  • 2014-09-13
  • 2010-12-09
  • 1970-01-01
  • 2014-02-18
  • 2012-12-09
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多