关于数组的相关操作(JAVA)

数组合并

以合并两个数组为例,有以下方法:
①System中提供了一个native静态方法arraycopy(),可以使用这个方法来实现数组之间的复制。
**System.arrayCopy()**方法的参数说明:

/**
*Object src: 原数组
*int srcPos : 从元数据的起始位置开始
*Object dest : 目标数组
*int destPos : 目标数组的开始起始位置
*int length  : 要copy的数组的长度
**/
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

具体代码例子:

public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("please input Array:");
		String input = sc.nextLine();
		String[] in = input.split(" ");
		int[] array = new int[in.length];
		for(int i=0;i<in.length;i++)
			array[i] = Integer.parseInt(in[i]);
		int[] lizi = {1,2,3,4};
		ArrayMerge(array,lizi);
}

public static void ArrayMerge(int[] array1,int[] array2){
		int[] res = new int[array1.length+array2.length];
		System.arraycopy(array1, 0, res, 0,array1.length);
		System.arraycopy(array2, 0, res, array1.length, array2.length);
		for(int num:res)
			System.out.print(num+" ");
	}

控制台输出为:
在这里插入图片描述
②使用java.util.Arrays包中的Arrays.copyOf()方法。

/**
*Object表示复制某一类型的数组
*length表示复制后新数组的大小
**/
Arrays.copyOf(Object[] ob,int length)

下面是具体例子:

public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("please input Array:");
		String input = sc.nextLine();
		String[] in = input.split(" ");
		int[] array = new int[in.length];
		for(int i=0;i<in.length;i++)
			array[i] = Integer.parseInt(in[i]);
		int[] lizi = {1,2,3,4};
		MergeArray(array,lizi);
}

public static void MergeArray(int[] array1,int[] array2){
		for(int i=0;i<array2.length;i++){
			array1 = Arrays.copyOf(array1,array1.length+1);
			array1[array1.length-1] = array2[i];
		}
		for(int num:array1)
			System.out.print(num+" ");
	}

控制台输出为:
在这里插入图片描述

数组中的删除(删除数组中某个/某些元素)

①删除元素的位置已知是n,删除后的数组顺序改变:

/*
	 * 已知要删除的元素位置n
	 * 然后删除此元素
	 */
	public static void delete(int n,int[] array){
		//把最后一个元素替代指定的元素
		array[n-1] = array[array.length-1];
		//数组缩容,借此删除最后一个元素
		array = Arrays.copyOf(array, array.length-1);
		for(int num:array)
			System.out.print(num+" ");
	}

②已知删除元素的值为n,删除后数组的相对顺序不变:

/*
	 * 已知要删除的元素是n
	 * 在Array[]数组中遍历,把与n不等的元素复制进一个新的数组中
	 * 最后完成删除操作
	 */
	public static void del(int n,int[] array){
		int[] res = new int[0];
		//遍历array寻找与n不等的元素并写入新数组中
		for(int i=0;i<array.length;i++)
			if(array[i]!=n){
				res = Arrays.copyOf(res, res.length+1);
				res[res.length-1] = array[i];
			}
		
		for(int num:res)
			System.out.print(num+" ");
	}

③采用list中的remove()方法来删除元素。

public static void main(String[] args){
		String[] str = {"H","hello","s","H","sad"};
		de("H",str);
}

/**
	 * 已知要删除的字符串为n
	 * 采用将原数组中为n的元素设置为与原数组无关的值,比如为“*”
	 * 然后定义一个list列表,调用list的remove()方法删除所有为(“*”)的元素
	 * 最后将list列表转换给一个新定义的中间数组,并赋值给它
	 * 最后完成删除数组中的元素
	 * @param n
	 * @param array
	 */
	public static void de(String n,String[] array){
		for(int i=0;i<array.length;i++)
			if(array[i]==n)
				array[i] = "*";
		//定义一个list列表,并循环赋值
		ArrayList<String> list = new ArrayList<String>();
		for(int i=0;i<array.length;i++)
			list.add(array[i]);
		//删除list列表中所有的空值
		while (list.remove("*"));
	    while (list.remove(""));
		
	    String res[] = new String[list.size()];
	    for(int i=0;i<list.size();i++)
	    	res[i] = list.get(i);
	    
	    for(String num:res)
	    	System.out.print(num+" ");
	}

控制台输出为:
在这里插入图片描述

数组的全排列

思路:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

例如:将 数组 { 1,2,3}进行全排列

首先,我们需要知道当只有一个元素进行全排列的时候,全排列就等于它本身。

这个数组的全排列就是需要将 每个元素放到数组首部,然后将剩下的元素进行全排列,依照此思路我们可以用递归很快的写出代码。

public static void main(String[] args) {
    int[] array={1,2,3,4};
    AllSort(array, 0, array.length-1);
}
/**
*@m 数组array的开头begin
*@n 数组array的末尾end
**/
public static void AllSort(int[] array,int m,int n){
    //只有一个元素时,直接输出
    if(m==n){
        System.out.println(Arrays.toString(array));
        return;
    }
    //把子数组的第一个元素依次和第二个、第三个元素交换位置
    for(int i=m;i<=n;i++){
        swap(array,m,i );
        //递归剩余的元素
        AllSort(array, m+1, n);
        //交换回来
        swap(array,m,i );
    }
}

public static void swap(int[] array,int a,int b){
    int temp = array[a];
    array[a] = array[b];
    array[b] = temp;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值