一.数组的说明

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循环 foreachfor(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.csdn.net/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 81int 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 nullString[] ss2 = new String[ss1.length*2];//原来数组长度的两倍//数据的复制//"麻生希"    "椎名空" "北岛玲" null null nullfor(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零基础入门第一阶段(7)相关推荐

  1. JAVA零基础入门第一阶段(3)

    一.运算符 1.算数运算符:+.-.*./.%.++.– 1.算数运算符 int num1 = 10;int num2 = 5;int result = num1 + num2;System.out. ...

  2. JAVA零基础入门第一阶段(4)

    一.if分支 1.复杂if分支 ①案例 案例一: 人类的健康值在20-25的数值内为健康(健康值算法为:体重(Kg) / 身高(米)的平方)分析:1.输入体重和身高2.计算出健康值3.判断 Scann ...

  3. 最适合Java初学者学习的Java零基础入门教程

    各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java. 因此,也是吸引了不少年轻人投入到Java的学习之中. 所以,今天 ...

  4. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  5. 一篇文章让你从JAVA零基础入门`OOP`编程12.19

    一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后,整理的文章,文中对知识点的解释仅为个人理解. 配套PPT,站点源码,等学习资料 一.预科 1.1 JAVA 介 ...

  6. 一篇文章让你从JAVA零基础入门`OOP`编程12.20

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(QQ_3336392096.png)] 一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后, ...

  7. 一期完结《一篇文章让你从JAVA零基础入门`OOP`编程》12.21

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(QQ_3336392096.jpg)] 一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后, ...

  8. java零基础入门的四大步骤

    对于许多想要转换到Java开发的初学者来说,如何学习Java是一个问题.在很多人眼里,程序员是高薪的代名词,所以他们吸引了很多想要转到Java开发的初学者.但是对于很多初学者来说,他们不知道从哪里开始 ...

  9. 【JAVA零基础入门系列】Day14 Java对象的克隆

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

最新文章

  1. cocos2dx 优化略记
  2. 我的AngularJS学习轨迹
  3. 2011年全国软件大赛模拟题及参考答案(Java本科组)
  4. 图神经网络(一)图信号处理与图卷积神经网络(2)图信号与图的拉普拉斯矩阵
  5. 对称加密算法原理与常用实现
  6. python是值传递还是引用传递_Python里参数是值传递还是引用传递?
  7. python贪吃蛇_python贪吃蛇
  8. 循环系统疾病病人的护理题库【2】
  9. JDK 和 JRE 有什么区别
  10. python字符串加减乘除_从字符串解析加减乘除符号
  11. linux tomcat bin目录,Tomcat bin目录详解-bin文件怎么打开
  12. Vue图表(v-charts, e-charts)入门安装使用
  13. Cisco ACS 5.8 Radius认证服务器安装教程
  14. DragonBoard 高通推出 IoT板 hitting raspberry pi
  15. 软件的安全性应从哪几个方面去测试?
  16. python爬虫(四)cookie模拟登录和反反爬案例
  17. 基于Java+控制台实现车辆信息管理系统
  18. 使用Git将本地文件提交到远程仓库
  19. 通过CLion 调试JDK源码
  20. 智能网联服务器在汽车远程控制的探索 1(拉开帷幕:旧瓶装新酒连接物联网服务器)

热门文章

  1. linux crossover 乱码,解决ubuntu下crossover中qq中文字体乱码问题
  2. 通俗易懂C语言--关键字
  3. iOS15Beta2来了,修复大量Bug,新变化来了
  4. strpos() 返回字符串在另一字符串中第一次出现的位置(区分大小写)stripos()(不区分大小写)
  5. android蓝牙SPP协议以及BluetoothSocket/BluetoothServerSocket的简单使用
  6. L9362_四通道低侧驱动器
  7. vue-cli build打包后CSS浏览器兼容前缀自动去除的问题
  8. NC6系列开发自定义参照
  9. 华为荣耀路由器虚拟服务器,华为荣耀路由器有线桥接怎么设置?
  10. zabbix源码编译