看起来so sasy,slice截取,concat拼接到末尾。
就像这样:
var arr = [1,2,3];var newArr = arr.slice(1).concat(arr.slice(0,1));///[2,3,1]
js有专门截取数组的api,很方便很强大,但java并没有,本文使用java来实现这样一个小功能。
import java.util.Arrays;public class GetPartOfArray { private int[] numberArray; private int len; public void create (int num) { len = num; numberArray = new int[len]; for(int i = 0; i < numberArray.length; i ++) { numberArray[i] = i; } } public void logArr () { System.out.println(Arrays.toString(numberArray)); } public void firstToEnd () { int[] numArr = new int [len]; System.arraycopy(numberArray, 1, numArr, 0, len - 1); System.arraycopy(numberArray, 0, numArr, len - 1, 1); numberArray = numArr; } public static void main (String[] args) { GetPartOfArray g = new GetPartOfArray(); g.create(10); g.logArr(); g.firstToEnd(); g.logArr(); }}
首先,为了为了方便查看数组,引入 java.util.Arrays ,使用 Arrays.toString(数组) 这个api可以很方便的查看数组元素,不然直接 System.out.println(数组) 输出的话,绝对让你看不懂,有可能是引用数组对象的地址。
然后创建一个数组,自定义长度,元素值为下标值,简单易看。
接着就是实现这个功能最重要的api,System.arraycopy(),这是一个复制用的api,里面有5个参数:
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
源数组, 开始复制位置, 目标数组, 起始位置, 复制长度
很好理解~
我们创建一个新数组,通过分别复制第一个元素与剩余元素来达到目的效果。第一次我们从源数组第二个元素下标位置开始复制,然后将复制值从目标数组的0下标位置开始到预复制长度,这样我们实现了数组元素的整体前移一位;第二次,从源数组0下标位置复制一位到目标数组最后元素位置,实现数组第一个元素移动到数组最后位置。
最后,我们将实现目的的新数组的引用给原来的数组。至此,功能实现啦。