一维数组的定义与使用方式
数组基本练习
Arrays
工具类
案例---点名器
二维数组
相同类型数据的有序集合
一开始大小固定--->开始初始化
数组本身属于引用类型--->初始化需要new一个对象并且开辟空间
数组中可以存储任意类型的数据
通过索引去使用数组:
普通for循环:
增强for循环:--->因为数组本身是一个对象
/** * 普通for循环方法 */ public static void forArray(){ int[] number = {1,2,3,4,5}; for (int i=0; i<number.length; i++){ System.out.println(number[i]); } }
/** * 增强for循环打印数组内容 */ public static void forEachArray(){ int[] number = {5,4,3,2,1}; for (int num : number){ System.out.println(num); } }
这两种打印方法在本质上是有区别的主要区别在内存上:
普通for循环:
打印的number[i]中这个"i"是一个引用
增强for循环:
将堆内存的数组中的值取出,放入到变量num当中,再去打印出。不便于引用
/** * 数组赋值的方法 */ public static void changeArray(){ //int[] number = {}; /* 上面这个写法实际上在堆内存当中并没有开辟对象空间 所以之前直接循环是无法对数组进行赋值 基本数据类型的数组无法使用动态分配的方式进行赋值 因为基本数据类型不需要new一个对象去创建。即便使用包装类那么返回的也是一个基本数据类型的值 而该值不需要创建对象 */ int[] number = new int[10]; for (int i=0; i<10; i++){ number[i] = 10*(i-1); System.out.println(number[i]); } } /** * 动态分配空间赋值 */ public static void changeArrays(){ int[] number = {}; for (int i=0; i<number.length; i++){ number[i] = new Integer(10*(i-1)); System.out.println(number[i]); } /* 可以通过编译,但是没有结果 */ }
/** * 遍历char数组,倒序输出数组内容 * @param arr */ public static void print(char[] arr){ for (int i=arr.length-1; i>=0; i--){ System.out.println(arr[i]); } }
/** * 遍历int数组,获取最大值和最小值 * @param arr */ public static void printMaxMin(int[] arr){ int max = arr[0]; int min = arr[arr.length-1]; for (int i=0; i<arr.length; i++){ if (arr.length==1){ System.out.println(arr[i]); }else { if (arr[i]>max){ max = arr[i]; }else if (arr[i]<min){ min = arr[i]; } } } /* 抓头尾设为变量,然后用数据进行比较 因为是比较大小所以需要比较必须有比较的对象 */ System.out.println(max); System.out.println(min); }
/** * 实现一个随机的点名器 * 使用循环去读取多对象--->设置索引为随机的 * @param arr */ public static void randomPrintName(String[] arr){ int randomnumber = (int) (Math.random()*arr.length); System.out.println(arr[randomnumber]); }
二维数组的定义:
数组中套数组
实例:
static int[][] doubleArray = {{1,2},{2,3},{3,4}}; //如果使用的是直接定义长度的话 //不同维度的数组可以定义不同的空间长度
实例:
public static void print(int[][] arr){ for (int[] num : arr){ for (int number : num){ System.out.println(number); } System.out.println(num); } }
num为引用,打印出来的是一个hash地址
number为内容的引用,打印出来的是具体值
注意:
无论几维数组,都是引用类型
其对象分配的空间都在堆中
static int[][] doubleArrays = new int[5][]; //这里就没有定义二维数组的长度 public static void createSpace(int[][] arr){ arr[0] = new int[2]; arr[0][1] = 1; System.out.println(arr[0][1]); /* 因为要给二维数组的内部再进行长度定义,那么需要找到一位数组的索引 然后再通过新建对象的方法给该索引下的空间进行长度定义 */ }