java数组知识

数组用来存储一个元素个数固定且元素类型相同的有序集。

  • 一维数组
  1. 声明数组变量:
    //一、元素类型[]  数组引用变量;(推荐使用)
    int[] myArray;
    //二、元素类型  数组引用变量[];
    int myArray[];
  2. 创建数组:不同于基本数据类型变量的声明,声明一个数组变量时并不在内存中给数组分配任何空间,只是创建了一个对数组的引用的存储位置。声明变量后,可以使用下面语法创建数组:这条语句做了两件事:1)使用new int[8]创建一个数组;2)把创建的数组的引用赋值给变量myArray。
    myArray = new int[8];//定义数组长度为8
  3. 声明、创建、引用赋值合并为一条语句:
    int[] myArray = new int[8];
  4. 匿名数组的创建
    //new 数据类型[] {值0,值1,值2,……,值n}
    printArray(new int[]{2,4,5,2,8});
    public static void printArray(int[] array){
        for (int i : myArray) {
    		System.out.print(i+"");
    }

     

  5. 数组的大小和默认值:给数组分配空间时,必须指定该数组能够存储的元素个数来确定数组大小,数组创建后不能修改它的大小。数组创建后被赋予默认值,数值型基本数据类型的默认值为0,char型的默认值为‘\u0000’,boolean型的默认值为false。
  6. 数组下标变量:数组元素可以通过下标访问,下标基于0,范围从0开始到array.length-1结束。
  7. 数组初始化:
    //声明数组、创建数组、初始化数组合并到一句:元素类型[] 数组引用变量 = {key1,key2,...,keyn}
    int[] myArray = {1,2,3,4,,5,6};
  8. 数组处理:
  • for循环遍历:
int[] myArray = {1,2,4,5,7,8,8};
for (int i = 0; i < myArray.length; i++) {
	System.out.println(myArray[i]);
}
  • 使用随机数初始化数组:
int[] myArray = new int[8];
for (int i = 0; i < myArray.length; i++) {//初始化为0到100(不包括)之间的随机整数
	myArray[i] = (int)(Math.random()*100);
	System.out.println(myArray[i]);
}
  • 数组的显示:为了打印数组,必须使用类似以下的循环,打印数组中每个元素。(对于char[]类型的数组,直接使用    System.out.print(sourceArray)就可以,其他类型的数组打印出来是引用的地址)。
int[] sourceArray = {1,2,3,4,5,6};
for (int i = 0; i < sourceArray.length; i++) {
	System.out.print(sourceArray[i]+"");
}
  • 打乱数组元素顺序:
    //针对每个元素myArray[i],随意产生一个下标index,然后将myArray[i]和myArray[index]交换
    for (int i = 0; i < myArray.length; i++) {	
    	int index = (int)(Math.random()*myArray.length);
    	int tmp = myArray[i];
    	myArray[i] = myArray[index];
    	myArray[index] = tmp;
    			
    }

     

  • 数组的复制:进行数组赋值时,可能会想到使用赋值语句(=),如下所示:该语句并不能将array1引用的数组内容赋值给array2,而只是将array1的引用值复制给了array2。在这条语句之后,两个数组都指向同一个数组的引用,
    array2 = array1;

       Java中,可以使用赋值语句复制基本数据类型的变量,但不能复制数组。将一个数组变量赋值给另一个数组变量,实际上是将一个数组的引用赋值给另一个变量,使两个变量都指向相同的内存地址

复制数组有三种方法:

  • 1)使用循环语句逐个的复制数组的元素:
int[] sourceArray = {1,2,3,4,5,6};
int[] targetArray = new int[sourceArray.length];
for (int i = 0; i < sourceArray.length; i++) {
	targetArray[i] = sourceArray[i];
}
  • 2)使用System类中的静态方法(java.lang.System包)arraycopy,arraycopy的语法如下(arraycopy方法没有给目标数组分配内存空间,复制前必须创建目标数组以及分配给它的内存空间):
/*
参数src_pos和tar_pos分别表示在源数组sourceArray和目标数组targetArray中的起始位置,从sourceArray复制到targetArray中的元素个数由参数length指定。
**/
System.arraycopy(sourceArray,src_pos,targetArray,tar_pos,length);
  •  3)使用clone方法复制数组                                
  • 数组在方法中的传递:java使用值传递的方式将实参传递给方法,传递基本数据类型变量的值与传递数组值有很大区别:
对于基本数据类型参数,传递的是实参的值;对于数组类型参数,传递的是数组的引用(类似于C语言中的指针),所以,在方法中改变数组的内容,会看到方法外的数组也发生变化。
  • 从方法中返回数组:
int[] myArray = {1,2,4,5,7,8,8};
int[] myArray2 = reverse(myArray);
//反序输出数组
private static int[] reverse(int[] array) {
	int[] result = new int[array.length];
	
	for (int i = 0,j = result.length-1; i < result.length; i++,j--) {
		result[j] = array[i];
	}
	return result;
}
  • 统计字符数组中每个字符出现的次数:
    	public static void main(String[] args) {
    		char[] array = getRandomCaseLetter(100);
    		System.out.println(array);
    		int[] counts = countLetters(array);
    		for (int i : counts) {
    			System.out.print(i+" ");
    		}
    	}
    	
    	
    	/*
    	 * 统计每个字符出现的次数
    	 */
    	private static int[] countLetters(char[] array) {
    		int counts[] = new int[26];
    		for (int i = 0; i < array.length; i++) {
    			counts[array[i]-'a'] ++; 
    		}
    		return counts;
    	}
    
    	/*
    	 * 产生长度为length的小写字母组成的随机字符数组
    	 * */
    	private static char[] getRandomCaseLetter(int length) {
    		char[] array = new char[length];
    		for (int i = 0; i < array.length; i++) {
    			array[i] = (char)('a'+ Math.random()*('z'-'a'+1));
    		}
    		return array;
    	}

     

  • 将字符数组转换成字符串:

char[] chs = {'2','3','5'};
String seq = String.valueOf(chs);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值