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]
,1映射到out[1]
和out[2]
,2映射到out[3]
和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;
}
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];