- 系列文章目录
- 前言
- 一、数组介绍
- 二、数组的使用
- 1.分配方式
- 2. 数组使用注意事项和细节
- 3. 数组赋值机制
- 4.数组拷贝
- 5.数组反转
- 6.数据扩容
- 总结
前言
数组的基础知识,容易遗忘,特记录
一、数组介绍
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。
数组是从0开始编号的
可以通过数组名.length得到数组的大小长度
数据的引用(使用/访问/索引) 数组的下标从0开始
数组分配方式
第一种动态
double scores[] = new double[5];
第二种动态
Double scores[];//声明数组,这时 scores 是 null
Scores = new double[5];//分配内存空间可以存放数据
第三种静态初始化
Int a[] = {2.2.4.5.6.34.56};
不同情况下用不同方式
代码如下(示例):
double[] scores = new double[5] 和 double scores[] = new double[5] 等价
Scanner myScanner = new Scanner(System.in);
for( int i= 0; i<= score.length;i++){
System.out.println("第" + (i+1) + "个元素的值=");
Scores[i] = myScanner.nextDouble();
}
2. 数组使用注意事项和细节
- 数组是多个相同类型数据的组合,实现对这些数据的统一管理
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
- 数组创建后,如果没有赋值,有默认值
int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char u0000,boolean false,String null - 使用数组的步骤 1. 声明数组并开辟空间 2 给数组各个元素赋值 3 使用数组
- 数组的下标是从 0 开始的。
- 数组下标必须在指定范围内使用,否则报:下标越界异常,比如
提示:char 类型数据运算 ‘A’+1 -> 'B
- 定义一个 数组 char[] chars = new char[26]
- 因为 ‘A’ + 1 = ‘B’ 类推,所以使用 for 来赋值
- 使用 for 循环访问所有元素
char[] chars = new char[26];
for( int i = 0; i < chars.length; i++) {//循环 26 次
//chars 是 char[]
//chars[i] 是 char
chars[i] = (char)('A' + i); //'A' + i 是 int , 需要强制转换
}
3. 数组赋值机制
- 基本数据类型赋值,这个值就是具体的数据,而且相互不影响。
int n1 = 2; int n2 = n1; - 数组在默认情况下是引用传递,赋的值是地址。
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
arr2[0] = 10;
(可以两个数组都指向一个地址,要是一个改值,另外一个查询到的也是这个,都变了)
输出为10,2,3
Int[] arr1 = {10,2,30};
Int [] arr2 = arr1;//这个不叫拷贝,这个数据是共享的,不是独立的
int[] arr1 = {10,20,30};
//创建一个新的数组 arr2,开辟新的数据空间
//大小 arr1.length;
int[] arr2 = new int[arr1.length];
//遍历 arr1 ,把每个元素拷贝到 arr2 对应的元素位置
for(int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
5.数组反转
数据元素内容反转
方式1:通过找规律反转
int temp = 0; int len = arr.length;//计算数组的长度 for(int i =0;itemp = arr[arr.length -1-i];//保存 arr[arr.length -1-i] = arr[i]; arr[i]=temp;
方式2:使用逆序赋值方式
先创建一个新的数组 arr2,将每个元素拷贝到 arr2 的元素中(顺序拷贝)
int[] arr = {11,22,33,44,55,66};
int[] arr2 = new int[arr.length];
for(int i=arr.length-1,j=0;i>=0;i--,j++){
arr2[j]=arr[i];
}
for(int z=0;z<=arr2.length-1;z++){
System.out.println(arr2[z]+" ");
}
6.数据扩容Arr=arr2;
当用了这条命令后,
如上图,arr的地址和arr2一样,链接到了0x22,而0x11地址没有变量引用,被注销
思路分析
1. 定义初始数组 int[] arr = {1,2,3}//下标 0-2
2. 定义一个新的数组 int[] arrNew = new int[arr.length+1];
3. 遍历 arr 数组,依次将 arr 的元素拷贝到 arrNew 数组
4. 将 4 赋给 arrNew[arrNew.length - 1] = 4;把 4 赋给 arrNew 最后一个元素
5. 让 arr 指向 arrNew ; arr = arrNew; 那么 原来 arr 数组就被销毁
6. 创建一个 Scanner 可以接受用户输入
7. 因为用户什么时候退出,不确定,老师使用 do-while + break 来控制
arr最后会被销毁
mport java.util.Scanner;
public class HelloWorld {
public static void main(String []args) {
Scanner myScanner = new Scanner(Syetem.in);
int[] arr = {11,22,33};
do{
int[] arrnew = new int[arr.length+1];
for(int i = 0;i
arrnew[i]=arr[i];
}
System.out.println("请输入你要添加的元素");
int addnum=myScanner.NextInt();
//把arr指向arrnew最后一个元素
arrnew[arrnew.length-1] = addnum;
//让arr指向arrnew
arr = arrnew;
//输出arr 看看效果
for(int i = 0;i
System.out.print(arrnew[i] + "t");
}
//问用户是否继续
System.out.println("是否继续添加 y/n");
char key = myScanner.next().charAt(0);
if(key == 'n'){
//如果输入n,就结束
break;
}
}while(true);
System.out.println("您已退出添加...");
}
}
不好的地方,就是:数组每次添加一个,就会得找一个新数组把之前几个位置的数据再粘贴过来、不如链表好用
总结
之后还有
部分图文字 来自韩顺平老师课堂笔记



