数组
1. java中数组的定义
以下两种数组定义都可以,更推荐第一种。
int[] nums; //只声明数组,不分配内存空间
int nums2[];
2.在java语言中使用new来创建一个新数组
//第一种方法
int[] nums = new int[10];
//第二种方法
int[] nums;
nums = new int[10];
3. 数组元素通过下标来访问,数组的长度可以直接通过length属性获得
int[] nums; //声明数组
nums = new int[10];//分配内存空间
System.out.println(nums.length);//输出数组的长度
看网课的时候随手打了一个用例,可供参考:
public class TestArrays {
public static void main(String[] args) {
int[] nums;
nums = new int[10];
for (int i = 0; i < 10; i++) {
nums[i]=i*35+27;
}
System.out.println("当前数组长度为:"+nums.length);
System.out.println("当前数组内容为:");
for (int j = 0; j < 10; j++) {
System.out.println(" "+nums[j]);
}
}
}
4.JAVA的内存分析
JAVA的内存可以分为堆,栈,方法区。
其中,堆可以存放new的对象和数组,可以被所有的线程共享,不会被别的对象引用
栈可以存放基本变量类型(会包含这个类型的具体数值)和引用对象的变量(会存放这个引用在堆里面的具体地址);
方法区,可以被所有的线程共享,包含了所有的class和static变量
java对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身就是在堆中的。
5.数组下标越界问题
数组下标的合法范围是 [0, array.length-1] ,只要超过这个范围,就会产生数组下标越界异常。
从而产生 ArrayIndexOutofBoundException 错误
6.数组的使用
6.1 for-each循环
一种快速遍历数组的方式:【IDE快捷键:数组名.for】
这是一种 无下标循环,因此只适合打印,不适合复杂操作。
for (int num : nums) {
System.out.println(nums);
}
6.2 数组作为函数的参数及调用方式
public class TestArrays {
public static void main(String[] args) {
int[] nums;
nums = new int[10];
for (int i = 0; i < 10; i++) {
nums[i] = i * 35 + 27;
}
System.out.println("计算所有元素的和:");
printArraySum(nums); //调用函数时传参
}
public static void printArraySum(int[] num){ //作为函数的参数
int sum=0;
for(int i=0;i<num.length;i++)
{
sum+= num[i];
}
System.out.println(" "+sum);
}
}
7. 多维数组
多维数组可以视为数组的数组。
int[][] array = {{1,2},{2,3},{3,4},{4,5}}; //静态定义二维数组
7.1 多维数组的Length属性
多维数组同样具用length属性——
比如这样一个数组:
int[][] nums; //声明二维数组
nums = new int[2][3];//定义二维数组
也就是说这个二维数组存储了两个数组,其中每个数组的空间为3。
也即:
System.out.println("第一维数组长度:"+nums.length);
System.out.println("第二维数组长度:"+nums[0].length);
先输出2,再输出3。
7.2 多维数组的传参
public class TestArrays {
public static void main(String[] args) {
int[][] nums2;
nums2 = new int[2][3];
printtwoNums(nums2);//多维数组作为参数
}
public static void printtwoNums(int[][] nums3){ //多维数组作为参数
System.out.println("第一维数组长度:"+nums3.length);
System.out.println("第二维数组长度:"+nums3[1].length);
}
}
8. Arrays类——JAVA中处理数组的类
用之前记得导入包:
import java.util.Arrays;
8.1 Arrays打印数组元素 tostring
import java.util.Arrays;//导入包
public class Test2Arrays {
public static void main(String[] args) {
//定义数组并赋予初值
int[] nums;
nums = new int[10];
for (int i = 0; i < 10; i++) {
nums[i]=i*35+27;
}
//Arrays方法打印数组元素_前后会带中括号
System.out.println(Arrays.toString(nums));
}
}
输出结果:
8.2 Arrays的数组排序——sort
这里为了观察排序方便,加了一个产生随机数的过程,先让程序产生随机数把数组填充起来,然后再对其进行排序。
需要先导入一个math包,然后使用其中的随机数方法。
import java.util.Arrays;//导入包
import java.math.*; //导入一个Math包生成随机数
public class Test2Arrays {
public static void main(String[] args) {
//定义数组并赋予初值
int[] nums;
nums = new int[10];
for (int i = 0; i < 10; i++) {
nums[i]=(int)(Math.random()*100);//随机生成100以内的随机数,并强制转换为整数
}
for (int i = 0; i < 10; i++) {
System.out.print(" "+nums[i]);
}
//Arrays方法进行排序
Arrays.sort(nums);
System.out.println("排序后的数组为:");
//打印数组
System.out.println(Arrays.toString(nums));
}
}
输出结果:
8.3 Arrays类的fill方法
将数组中的全部元素/部分元素填充为某个固定值
import java.util.Arrays;//导入包
import java.math.*; //导入一个Math包生成随机数
public class Test2Arrays {
public static void main(String[] args) {
//定义数组并赋予初值
int[] nums;
nums = new int[10];
for (int i = 0; i < 10; i++) {
nums[i]=(int)(Math.random()*100);//随机生成100以内的随机数,并强制转换为整数
}
for (int i = 0; i < 10; i++) {
System.out.print(" "+nums[i]);
}
//Arrays方法进行排序
Arrays.sort(nums);
System.out.println("排序后的数组为:");
//打印数组
System.out.println(Arrays.toString(nums));
System.out.println("将数组中的所有元素填充为0:");
Arrays.fill(nums, 0);//将数组中的所有元素填充为零
for(int i=0;i<nums.length;i++)
System.out.print(" "+nums[i]);
}
}
输出结果: