一.数组的说明
1.数组含义
存储多个数据的集合
2.相关概念
元素:数组里的数据
下标/索引:每个数据对应的编号,从0开始
3.数组的声明
数据类型[] 数组名;

二.数组的初始化
1.静态初始化
①静态初始化
初始化数组时,元素由程序员指定,长度由系统根据元素个数开辟内存空间
②初始化类型
//静态初始化1
String[] names = new String[]{“麻生希”,“水野朝阳”,“爱田奈奈”,“京香Juila”,“明日花绮罗”};//静态初始化2:先声明,再初始化
String[] names;
names = new String[]{“麻生希”,“水野朝阳”,“爱田奈奈”,“京香Juila”,“明日花绮罗”};//静态初始化3
String[] names = {“麻生希”,“水野朝阳”,“爱田奈奈”,“京香Juila”,“明日花绮罗”};
③实验

//设置指定下标上的元素
names[2] = "阿豪";
//获取指定下标上的元素
System.out.println(names[2]);
System.out.println("获取数组元素的个数:" + names.length);//5
2.动态初始化
①动态初始化
初始化数组时,长度有程序员指定,元素由系统根据元素类型默认初始化数据
整数类型:0
浮点类型:0.0
字符类型:’ ’
布尔类型:false
引用类型:null - 空
②初始化类型
//动态初始化1
String[] names = new String[5];//5-代表长度//动态初始化2
String[] names;
names = new String[5];//5-代表长度
③实验
//设置指定下标上的元素
names[0] = "李亮";
names[1] = "李洲";
names[2] = "阿豪";
names[3] = "冉儒江";
names[4] = "马川军";
//获取指定下标上的元素
System.out.println(names[2]);
System.out.println("获取数组元素的个数:" + names.length);//5

3.静态初始化 vs 动态初始化
静态初始化:一开始就知道数据
动态初始化:一开始不知道数据,只知道长度
注意:
1.不管数组里存的是什么类型,数组都是引用数据类型
2.数组一旦初始化后,数组在内存中开辟的空间就决定了(数组长度不能改变-不能扩容、不能删除)
3.下标超出了界限,会报数组下标越界异常 - ArrayIndexOutOfBoundsException
4.names叫做引用,该引用存的是数组在堆内存中开辟空间的地址
5.new关键字指的是在堆内存中开辟空间
三.数组的访问
1.通过下标访问指定元素
2.循环访问
①.遍历
//遍历 - for循环
for(int i = 0;i<names.length;i++){
System.out.println(names[i]);
}
System.out.println("-----------------");
//遍历 - 增强for循环 foreach
for(String str : names){//循环,依次取出数组中的元素,并赋值给str变量
System.out.println(str);
}
②.for vs foreach
如果要是用到下标,就是用for循环
如果不用到下标,就是用foreach
四.数组的排序
1.冒泡排序
int[] is = {8,21,15,81,69,4};
//冒泡排序
for(int i = 0;i<is.length-1;i++){
for(int j = 0;j<is.length-1-i;j++){
if(is[j] > is[j+1]){
int temp = is[j];
is[j] = is[j+1];
is[j+1] = temp;
}
}
}
//打印输出
for(int num:is){
System.out.println(num);
}
2.扩展
https://www.cnblogs.com/yinzhengjie/p/8877352.html
https://blog.youkuaiyun.com/qq_41664447/article/details/81391646
五.数组的查找
1.顺序查找
for(int i = 0;i<is.length;i++){
if(is[i] == num){
System.out.println("找到该数值了");
break;
}
}
2.二分法查找
int[] is = {8,21,15,81,69,4};
int num = 85;
Arrays.sort(is);//排序: 4 8 15 21 69 81
int start = 0;
int end = is.length-1;
while(start <= end){
int mid = (start + end)/2;
if(is[mid] < num){
start = mid+1;
}else if(is[mid] > num){
end = mid-1;
}else{
System.out.println("找到该数值了");
break;
}
}
注意:前提必须排序
六.数组高级
1.数组的复制
1.
String[] ss1 = {"麻生希","椎名空","北岛玲"};
String[] ss2 = ss1;
ss1[1] = "阿豪";
for(String name : ss2){
System.out.println(name);
}
2.
String[] ss1 = {"麻生希","椎名空","北岛玲"};
String[] ss2 = new String[ss1.length];
for(int i = 0;i<ss1.length;i++){
ss2[i] = ss1[i];
}
ss1[1] = "阿豪";
for(String name : ss2){
System.out.println(name);
}


2.数组的扩容
//"麻生希" "椎名空" "北岛玲"
String[] ss1 = {"麻生希","椎名空","北岛玲"};
//null null null null null null
String[] ss2 = new String[ss1.length*2];//原来数组长度的两倍
//数据的复制
//"麻生希" "椎名空" "北岛玲" null null null
for(int i = 0;i<ss1.length;i++){
ss2[i] = ss1[i];
}
//引用赋值
ss1 = ss2;
for(String name:ss1){
System.out.println(name);
}

3.数组的删除
1.//需求:删除“阿伟"
String[] ss1 = {"阿豪","阿伟","麻生希","椎名空","北岛玲"};
String[] ss2 = new String[ss1.length-1];
int index = 0;
for(String name:ss1){
if(!name.equals("阿伟")){
ss2[index++] = name;
}
}
ss1 = ss2;
for(String name : ss1){
System.out.println(name);
}
2.//需求:删除“阿伟"
String[] ss1 = {"阿豪","阿伟","麻生希","椎名空","北岛玲"};
for(int i = 1;i<ss1.length-1;i++){
ss1[i] = ss1[i+1];
}
ss1[ss1.length-1] = null;
for(String name : ss1){
System.out.println(name);
}
4.数组参数和返回值
//数组的参数
public static void method1(int[] is){
}
//数组的返回值
public static int[] method2(){
int[] is = {1,2,3};
return is;
}
}
5.可变参数
int num = add(1,2,3,4,5,6,7,8,9);//把数据压入到数组中
System.out.println(num);
}
public static int add(int... is){//int... is --> 可变参数
int sum = 0;
for(int i = 0;i<is.length;i++){
sum += is[i];
}
return sum;
}
//注意:可变参数后不能加其他参数
public static void method(String str,int... is){
}
注意:本质就是数组
6.main参数问题
把这3个字符串压入到args的数组中
for(String str : args){
System.out.println(str);
}
命令行输入:java Test13 小红 小绿 小黄
扩展:Arrays工具类
Arrays工具类:操作数组的类
工具类:该类里的所有方法都是静态的,直接用类名调用
int[] is = {8,21,15,81,69,4};
//排序
Arrays.sort(is);
//Arrays.sort(is,1,4);
//(目标数组,开始下标-包含,结束下标-不包含)
//查找(查找之前一定要排序)
//返回值:搜索键的索引,如果它包含在数组中; 否则, (-(插入点) - 1) 。
int index = Arrays.binarySearch(is,20);
System.out.println("下标为:" + index);
//替换
Arrays.fill(is,888);
Arrays.fill(is,1,4,666);
//(目标数组,开始下标-包含,结束下标-不包含,替换的数据)
//把数组转换为字符串
System.out.println(Arrays.toString(is));
//拷贝数组(目标数组,新的长度)
int[] newIs1 = Arrays.copyOf(is,10);
System.out.println(Arrays.toString(newIs1));
//拷贝数组(目标数组,开始下标-包含,结束下标-不包含)
int[] newIs2 = Arrays.copyOfRange(is,1,4);
System.out.println(Arrays.toString(newIs2));
这篇博客详细介绍了JAVA数组,包括数组的声明、初始化(静态与动态)、访问方式、排序(冒泡排序)、查找方法(顺序与二分法)以及数组的高级特性如复制、扩容、删除等。此外,还提到了Arrays工具类的应用。
5万+





