栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数组的平移操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数组的平移操作

问题描述:给定一个数组,对其扩容后得到一个新数组,将和原数组中对应的元素往后平移给定的偏移量对应的位数,若平移后会越界,则至多平移至新数组的末尾。

1.给定数组(原数组)

int[] ints = { 1, 2, 3, 4 };

2.平移至末尾操作

System.out.println("=======扩容为原数组的3倍后,平移至末尾=======");
		int[] translate = translateToEnd(ints, ints.length*3);
		for(int e:translate) {
			System.out.print(e);
		}

3.平移至指定偏移量操作,若平移指定偏移量后会越界,则只平移至末尾

System.out.println("========扩容为7后,平移偏移量为2=======");
		int[] offset = traslateByOffset(ints, 2, 7);
		for(int e:offset) {
			System.out.print(e);
		}
System.out.println("========扩容为7后,平移偏移量为4,会越界,所以只平移至末尾=======");
		int[] offset2 = traslateByOffset(ints, 4, 7);
		for(int e:offset2) {
			System.out.print(e);
		}

演示结果

=======扩容为原数组的3倍后,平移至末尾=======
000000001234
========扩容为7后,平移偏移量为2=======
0012340
========扩容为7后,平移偏移量为4,会越界,所以只平移至末尾=======
0001234

完整源码

package compute;

import java.util.Arrays;


public class ArrayTranslation {
	public static void main(String[] args) {
		int[] ints = { 1, 2, 3, 4 };
		System.out.println("=======扩容为原数组的3倍后,平移至末尾=======");
		int[] translate = translateToEnd(ints, ints.length*3);
		for(int e:translate) {
			System.out.print(e);
		}
		System.out.println();
		System.out.println("========扩容为7后,平移偏移量为2=======");
		int[] offset = traslateByOffset(ints, 2, 7);
		for(int e:offset) {
			System.out.print(e);
		}
		System.out.println();
		System.out.println("========扩容为7后,平移偏移量为4,会越界,所以只平移至末尾=======");
		int[] offset2 = traslateByOffset(ints, 4, 7);
		for(int e:offset2) {
			System.out.print(e);
		}
	}
	
	public static int[] translateToEnd(int[] original,int newArrayLength) {
		int[] temp=Arrays.copyOf(original, newArrayLength);
		//将旧数组的原有元素平移至新数组的末尾
		for (int k = 0; k < original.length; k++) {
			temp[newArrayLength + k - original.length] = original[k];
		}
		//新数组的其它部分赋值为 0
		for(int p=0;p<(newArrayLength-original.length);p++) {
			temp[p]=0;
		}
		return temp;
	}
	
	public static int[] traslateByOffset(int[] original,int offset,int newArrayLength) {
		int[] temp;
		//如果平移后会越界,则只移动到末尾
		if (offset>(newArrayLength-offset)) {
			temp=translateToEnd(original, newArrayLength);
		}else {
			//平移指定偏移量
			temp=Arrays.copyOf(original, newArrayLength);
			for(int k=0;k(offset+original.length)) {
					temp[p]=0;
				}
			}
		}
		return temp;
	}
}

平移至末尾的操作在jdk的System类中有个与数组扩容复制有关的一个方法,叫做arraycopy,但是这是一个本地方法,在java.util.Arrays类中的copyOf方法调用了这个本地方法。
以下是这两个方法的源码。
System的arraycopy

 public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);

以下这个方法有很多重载方法,只列举一个
Arrays的copyOf

public static int[] copyOf(int[] original, int newLength) {
        int[] copy = new int[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }

温馨提示:如读完此篇博客感觉有收获,不妨再看看我的其它博客,皆为原创,且都是自己思考的产物。如有不足指出,也敬请批评指正。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/721682.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号