数组就是用来存储一批同种类型数据的内存区域
数组的定义格式 第一种数组适合做一批同种类型数据的存储。
数据类型[ ] 数组名
for example: int [] arr; double [] arr; char [] arr;第二种
数据类型 数组名[ ]
int arr[] double arr[] char arr[]数组动态初始化
数据类型 [ ] 数组名 = new 数据类型[数组长度]
int [] arr = new int[3];
等号左边:
int :数据类型为整形
【】:表示这是一个数组
arr :数组名
等号右边:
new:为数组开辟空间
【】:这是一个数组
3:代表数组的长度
数组名[索引]
package 数组;
public class itheima01 {
public static void main(String[] args) {
int [] arr = new int[3];
System.out.println(arr); // 数组的地址
System.out.println(arr[0]); // 初始时候没有赋值默认为0
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
内存分配
内存概述
- 内存是计算机中的重要原件,临时存储区域,作用是运行程序。
- 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
- 必须放进内存中才能运行,运行完毕后会清空内存。
- Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
- 目前我们只需要知道2个内存:栈内存和堆内存
package 数组;
public class itheima01 {
public static void main(String[] args) {
int [] arr = new int[3];
System.out.println(arr); // 数组的地址
System.out.println(arr[0]); // 初始时候没有赋值默认为0
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("对数组元素进行赋值");
arr[0] = 100;
arr[1] = 200;
// 再次输出
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
多个数组的赋值
比较简单这里直接以代码为例
package 数组;
public class ArrayDemo {
public static void main(String[] args) {
// 定义两个数组
int [] arr = new int[3];
int [] arr1 = new int[3];
// 分别输出
System.out.println("数组1");
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("数组2");
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
arr[0] = 100;
arr[1] = 200;
arr1[0] = 111;
arr[1] = 222;
System.out.println("赋值后的数组1");
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("赋值后的数组2");
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
}
}
内存分配
多个数组指向相同
语言比较晦涩,直接上代码,然后通过代码解释。
package 数组;
public class ArrayDemo {
public static void main(String[] args) {
// 定义两个数组
int [] arr = new int[3];
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
System.out.println("第一个数组");
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
// 定义第二个数组指向第一个数组
// 注意这里指向的是第一个数组的地址
// 也正因为指向第一个数组的地址,所以对arr2赋值也直接把arr数组的值给改变了。
int [] arr2 = arr;
arr2[0] = 111;
arr2[1] = 222;
arr2[2] = 333;
System.out.println("第二个数组");
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
System.out.println("第一个数组");
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
通过结果我们可以发现第一个数组和第二个数组的地址是相同的,第二个数组指向第一个数组,所以对第二个数组赋值的同时,因为第二个数组的栈内存的索引地址和第一个是一样的,所以第二个数组的赋值直接也会把第一个数组的值进行改变。
数组的访问定义数组时候直接给数组进行赋值
package 数组;
public class ArrayDemo {
public static void main(String[] args) {
// 定义两个数组
int [] arr = {1,3,5,7,9};
// int [] arr = new int [] {1,3,5,7,9}
for(int i =0;i < arr.length;i++){
System.out.println(arr[i]);
}
}
}
数组的几个注意事项
数组的动态初始化与静态初始化的区别
package 数组;
public class ArrayDemo {
public static void main(String[] args) {
// 定义两个数组
int [] arr = {1,3,5,7,9};
// int [] arr = new int [] {1,3,5,7,9}
for(int i =0;i < arr.length;i++){
System.out.println(arr[i]);
}
}
}
package 数组;
public class ArrayDemo {
public static void main(String[] args) {
int [] arr = {16,26,36,6,100};
int sum = 0;
for(int i =0;i < arr.length;i++){
sum += arr[i];
}
System.out.println("总销售额度为:"+sum);
}
}
package 数组;
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {15, 9000, 10000, 20000,9500, -5};
int max = 0;
for (int i =0;i < arr.length;i++){
if (arr[i] > max){
max = arr[i];
}
}
System.out.println("最大值为:"+max);
}
}
扩展
package 数组;
public class ArrayDemo {
public static void main(String[] args) {
int[] arr = {15, 9000, 10000, 20000,9500, -5};
// int len = arr.length;
// int [] arr2 = new int[len];
int mid = 0;
for (int i =0;i < arr.length;i++){
for(int j =0;j < arr.length;j++){
if(arr[i] > arr[j]){
continue;
}else {
mid = arr[i];
arr[i] = arr[j];
arr[j] = mid;
}
}
}
for (int j =0;j
package 数组;
import java.util.Random;
import java.util.Scanner;
public class ArrayDemo {
public static void main(String[] args) {
Random r = new Random();
Scanner sc = new Scanner(System.in);
// int num = r.nextInt(20);
int [] arr = new int[5];
for (int i = 0;i < arr.length;i++){
int num = r.nextInt(20);
arr[i] = num;
System.out.println(arr[i]);
}
while (true){
System.out.println("请输入一个0-20之间的数去猜测数是否再数组中");
int guess = sc.nextInt();
for(int j = 0; j < arr.length;j++){
if(arr[j] != guess){
continue;
}else {
System.out.println("END!!!");
break;
}
}
break;
}
}
}
内存分配
参考
黑马程序员:blob:https://www.bilibili.com/4140246d-9003-4a74-bc20-d6900819797a



