数组元素前移,第一个元素放置数组末位

  看起来so easy,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下标位置复制一位到目标数组最后元素位置,实现数组第一个元素移动到数组最后位置。

  最后,我们将实现目的的新数组的引用给原来的数组。至此,功能实现啦。

posted @ 2017-03-27 16:47  名字不好起啊  阅读(1182)  评论(0编辑  收藏  举报