Java如何将较大的数组复制到小数组?

时间:2017-04-05 18:00:53

标签: java arrays copy

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

我使用过System.arraycopy(),但此方法分别复制元素。因此,不能复制较大阵列中的某些元素。

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

2 个答案:

答案 0 :(得分:0)

如果您被允许使用其他“系统库”,解决方案非常简单:

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

关键是:当您对大数组进行随机播放时,您将其按随机顺序排列!

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

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

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

答案 1 :(得分:0)

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;
    }
}