Java 如何向与上一个值匹配的数组中添加值

Java 如何向与上一个值匹配的数组中添加值,java,arrays,Java,Arrays,我有一个非常简单的问题,我正试图解决,但似乎无法集中我的头脑如何去做。如果我有一个由[1,3,2,7]组成的数组,并且在运行该方法后将返回[1,1,3,3,2,2,7,7],那么最好的方法是什么?我还有一个大小变量,可以增加数组的大小以腾出空间,例如,在执行size*2之后,我将得到[1,3,2,7,0,0,0,0] 任何指导都将不胜感激:)java中的数组不能增长或收缩。因此,考虑到“输出”与“输入”的大小不同,只有一种方法:创建一个新数组 对于#1: 创建一个大小为input.length

我有一个非常简单的问题,我正试图解决,但似乎无法集中我的头脑如何去做。如果我有一个由
[1,3,2,7]
组成的数组,并且在运行该方法后将返回
[1,1,3,3,2,2,7,7]
,那么最好的方法是什么?我还有一个大小变量,可以增加数组的大小以腾出空间,例如,在执行
size*2
之后,我将得到
[1,3,2,7,0,0,0,0]


任何指导都将不胜感激:)

java中的数组不能增长或收缩。因此,考虑到“输出”与“输入”的大小不同,只有一种方法:创建一个新数组

对于#1:

  • 创建一个大小为
    input.length*2
    的新数组
  • 根据需要索引,使用for(int=0;istyle循环遍历输入中的每个项
  • 了解如何将0“映射”到
    out[0]
    out[1]
    ,1映射到
    out[2]
    out[3]
    ,2映射到
    out[4]
    out[5]
    ,等等。这是一个微不足道的数学练习

第二,这更容易。或者,只需使用
java.util.Arrays.copyOf
,它完全符合您的描述。

如果必须解决此问题,我将使用以下方法:

  • 创建长度为*2的新数组
  • 现在,从(int i=len;i>0;…)的
    遍历
    ,对于每个
    i
    ,我将执行以下操作

有多种方法可以做到这一点:

  • 创建一个双倍大小的结果数组,并通过复制输入中的元素来填充该数组:
  • 公共静态int[]重复数组(int…arr){
    int[]res=新的int[2*arr.length];
    int i=0;
    用于(整数x:arr){
    res[i++]=res[i++]=x;
    }
    返回res;
    }
    
  • 使用
    Arrays.copyOf
    创建用零填充的输入数组的副本。
    按相反方向填充结果数组(从最后一个到第一个):
  • public static int[]duplicateArrayCopy(int…arr){
    int[]res=Arrays.copyOf(arr,2*arr.length);//res用0填充
    对于(inti=res.length-1,j=arr.length-1;j>=0;j--){
    res[i--]=res[i--]=res[j];
    }
    返回res;
    }
    
  • 使用流API,主要是
    flatMap
    操作
    但是,许多中间对象(数组或流)是用这种方法创建的
  • public static int[]duplicateArrayStream(int…arr){
    返回Arrays.stream(arr)//IntStream
    .flatMap(x->array.stream(新的int[]{x,x}))
    .toArray();
    }
    //或
    公共静态int[]duplicateArrayStream2(int…arr){
    返回数组.stream(arr)
    .flatMap(x->Stream.of(x,x).mapToInt(i->i))
    .toArray();
    }
    
    到目前为止,您得到了什么?
    nums1[(i * 2) - 1] = nums[i - 1];
    nums1[(i * 2) - 2] = nums[i - 1];