数组
-
一维数组的定义与使用方式
-
数组基本练习
-
Arrays
工具类 -
案例---点名器
-
二维数组
数组定义
相同类型数据的有序集合
-
一开始大小固定--->开始初始化
-
数组本身属于引用类型--->初始化需要new一个对象并且开辟空间
-
数组中可以存储任意类型的数据
创建数组时的内存分配说明
数组的使用
通过索引去使用数组:
数组的遍历方式
普通for循环:
增强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循环打印数组内容
/**
* 增强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]);
/*
因为要给二维数组的内部再进行长度定义,那么需要找到一位数组的索引
然后再通过新建对象的方法给该索引下的空间进行长度定义
*/
}