JAVA零基础入门第一阶段(7)

这篇博客详细介绍了JAVA数组,包括数组的声明、初始化(静态与动态)、访问方式、排序(冒泡排序)、查找方法(顺序与二分法)以及数组的高级特性如复制、扩容、删除等。此外,还提到了Arrays工具类的应用。

一.数组的说明

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));
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值