以下属于网站seo的内容是,wordpress 标签云修改,中企动力公司官网,做百度推广的公司电话号码大佬们好呀~ 更多精彩#xff1a; 个人主页 JAVA专栏 文章目录 一、数组的概述1.1什么是数组#xff1f;1.2注意:1.3建议#xff1a; 二、数组的定义1.格式#xff1a; 三、数组的静态初始化1.数组的初始化:2.静态初始化#xff1a;格式#xff1a;数组的长度#xff1a… 大佬们好呀~ 更多精彩 个人主页 JAVA专栏 文章目录 一、数组的概述1.1什么是数组1.2注意:1.3建议 二、数组的定义1.格式 三、数组的静态初始化1.数组的初始化:2.静态初始化格式数组的长度 四、数组的地址值1.1地址值1.2拓展 五、数组的元素访问1.格式2.索引3.获取数组中的元素4.把数据存入到数组中 六、数组的遍历1.数组的遍历2.拓展3.练习3.1遍历数组求和3.2条件变化 七、数组的动态初始化1.动态初始化:1.1信息存入1.1.1添加1.1.2获取 1.2数组默认初始化值的规律 2.动态初始化与静态初始化的区别 八、数组的常见问题九、数组的常用操作1.求最值2.遍历求和3.交换数据4.打乱数据 十、数组的内存图1.java的内存分配2.数据的内存图 前言 在 Java 编程中我们经常要处理一系列数据数组作为最基础、常用的数据结构就像有序容器能有效存储和管理数据。接下来让我们深入探索 Java 数组从基础到高级掌握这一关键知识助力 Java 编程。 一、数组的概述
1.1什么是数组
数组指的是一种容器可以用来存储同种数据类型的多个值。
1.2注意:
这里在存储数据的时候要注意隐式转换。
int 类型的容器可存储byte,short,int
double 类型的数组容器可储存(byte,short,int,long,float,double)大doublefloatlongintshortbyte小大可以储存小隐式转换小不可以储存大强制转换1.3建议
容器的类型和存储的数据类型保持一致~
二、数组的定义
1.格式
格式数据类型 [] 数组名 或 数据类型 数组名 []int [] arry 或 int arry [][]此符号代表定义的是一个数组不写代表定义的是一个变量
三、数组的静态初始化
1.数组的初始化:
初始化就是在内存中为数组容器开辟空间并将数组存入容器中的过程。
包括静态初始化和动态初始化
2.静态初始化
数组的内容是固定的已知的。
格式
完整格式数据类型 [] 数组名 new 数据类型[]{元素1元素2元素3......};
int [] nums new int [] {1,2,3,4,5};简化格式数据类型[] 数组名{元素1元素2};
int arry []{123};数组的长度
arry : 长度为3
112233
四、数组的地址值
当我们定义一个数组其中含有三个元素123打印出这个数组arry.
eg:
int arry []{1,2,3};
System.out.println(arry);运行展示
[I10f87f48运行出来会出现一段乱码当然乱码并不是真的乱码而是数组的地址值
1.1地址值
就是表示数组在内存中的位置。
1.2拓展
解释一下地址值的格式含义
[:表示当前是一个数组
I:表示当前数组里面的元素是int类型的
:表示一个间隔符号固定格式
10f87f48:这才是数组真正的地址值十六进制
平时我们习惯性的会把这个整体叫做数组的地址值
五、数组的元素访问
1.格式
数组名[索引];
eg:
nums[0];2.索引
数值1234索引下标0123
特点从0开始逐个1增长连续不断
3.获取数组中的元素
int [] arr{11,12,13};
int numarr[0];
System.out.println(num);简单写法
int [] arr{11,12,13};
System.out.println(arr[0]);run:
114.把数据存入到数组中
格式
数组名[索引]具体数据/变量arr[0]100public class boke {public static void main(String[] args) {int [] arr{11,12,13};arr[0]100;System.out.println(arr[0]);}
}
run:
100细节一旦覆盖之后原来的数据就不存在了
六、数组的遍历
1.数组的遍历
将数组中所有的内容取出来取出来之后打印求和判断
注遍历指的是取出数据的过程不要局限的理解为遍历就是打印
根据我们上文的学习大家可能会想我一个个使用arr[i]打印出来不行吗
public class boke{public static void main(String[]args){int [] arr{1,2,3,4,5};System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);System.out.println(arr[3]);System.out.println(arr[4]);}
}run
1
2
3
4
5虽然这样一个一个println也可以遍历出数组的数据可是当数组的数据个数足够庞大时我们应该怎么办呢
我们想到了循环将索引换成变量i然后再循环打印arr[i]
我们来做一下代码实现
int [] arr{11,12,13};
for (i0;i4;i){System.out.println(arr[i]);
}我们在写循环时可能会遇到数组长度的问题我们有一个官方写法
调用方式
数组名.length
System.out.println(arr.length);
//打印数组的长度2.拓展
自动的快速生成数组的遍历方式
由IDEA提供的数组名.fori回车就会出现以下代码。
for (int i0;iarr.length;i){System.out.println(arr[i]);
}3.练习
3.1遍历数组求和
//将数组中的112233445566778899求和
public class bianli{public static void main (String[]args){int [] num {11,22,33,44,55,66,77,88,99};int sum 0;for (int i0 ; inum.length ; i){sumnum[i];}System.out.println(sum);}
}3.2条件变化
//如果是奇数将当前数字扩大两倍偶数将当前数字变成1/2
int [] num{1,2,3,4,5,6,7,8,9,10};
for (i0 ; inum.length ; i){if (num[i]%20){num[i]/2;}else{num[i]*2;}System.out.println(num[i]);
}一般情况下一个循环只做一件事于是我们可以优化一下
int [] num{1,2,3,4,5,6,7,8,9,10};
for (i0 ; inum.length ; i){if (num[i]%20){num[i]/2;}else{num[i]*2;}
}
for (i0 ; inum.length ; i){System.out.println(num[i]);
}//重新遍历一下七、数组的动态初始化
1.动态初始化:
初始化时只指定数组长度由系统为数组分配初始值。
格式
数据类型[]数组名new 数组类型[数组长度];
int [] arr new int [3];
//先建立一个空壳[3]说明只能存3个int类型的整数在创建的时候有我们自己指定数组的长度由虚拟机给出默认的初始值。
1.1信息存入
1.1.1添加
arr[0]3;1.1.2获取
System.out.println(arr[1]);run:0(默认初始化值)1.2数组默认初始化值的规律
整数类型默认初始化值0
小数类型默认初始化值0.0
字符类型默认初始化值‘/u0000’空格
布尔类型默认初始化值false
引用数据类型默认初始化值null2.动态初始化与静态初始化的区别
动态:
含义手动指定数组的长度由系统给出默认初始化值
只明确元素的个数不明确具体数值推荐使用动态初始化
eg:
使用数组容器来存储键盘录入的5个整数
int [] arr {????};
int [] arr new int[5]静态
含义手动指定数组元素系统会根据元素个数计算出数组的长度。
需求中已经明确了要操作的具体数据直接静态初始化即可。
eg:
将全班 的学生成绩存入数组中112233
int [] nums {11,22,33};八、数组的常见问题
索引越界异常访问了不存在的索引
索引的范围0~数组的长度-1
九、数组的常用操作
1.求最值
//已知数组元素为{335224455}请找出数组中最大的值并打印在控制台。
public class wenti {public static void main(String[] args) {int [] best {33,5,22,44,55};int max best[0];//记录数值的变化for (int i 0; i best.length; i) {//遍历数组中的每一个元素让他和max比较如果找到更大的就记录if (best[i]max) {max best[i];}}System.out.println(max);}
}
2.遍历求和
//生成10个1-100之间的随机数存入数组
//求出所有数据的和
//求出所有数据的平均数
//统计有多少个数据比平均数小
import java.util.Random;
public class suym {public static void main(String[] args) {Random rand new Random();int [] num new int[10];int sum 0;int count 0;for (int i 0; i 10; i) {int x rand.nextInt(100)1;num[i] x;sum x;System.out.println(x);if (num[i] sum/10){count;}}System.out.println(生成随机数的和为sum);System.out.println(生成随机数的平均数为sum/10);System.out.println(小于平均数的个数为count);}
}
3.交换数据
//将数组{12345}顺序交换
public class jiaoone {public static void main(String[] args) {int [] arr{1,2,3,4,5};//从两头开始遍历然后交换for(int i0 , jarr.length-1 ; ij ; i,j--){//找一个工具人方便交换int temparr[i];arr[i]arr[j];arr[j]temp;}for (int i 0; i arr.length; i) {//print同行打印System.out.print(arr[i] );}}
}
4.打乱数据
//需求将数组打乱
import java.util.Random;
public class da {public static void main(String[] args) {//导入随机数Random rannew Random();int randomran.nextInt(nums.length);int [] nums{1,2,3,4,5};for (int i 0; i nums.length; i) {//遍历数组拿着它和随机索引交换int tempnums[i];nums[i]nums[random];nums[random]temp;}for (int i 0; i nums.length; i) {System.out.print(nums[i] );}}}
十、数组的内存图
1.java的内存分配 注从JDK8开始取消方法区新增原空间把原来方法区的多种功能拆分有的功能放到了推中有的功能放到了元空间中。 栈方法运行时使用的内存比如main方法运行进入方法栈中执行。
堆存储对象或者数组new来创建的都存在堆内存
方法区存储可以运行的class文件
本地方法栈JVM在使用操作系统功能的时候和我们开发无关。
寄存器给CPU使用和我们开发无关 2.数据的内存图
通过arr找到地址值再通过索引找到数组内容。
注
1.只要是new出来的一定是在推里面开辟了一个小空间
2.如果new了多次那么在堆里面有多个小空间每个小空间中都有各自的数据。
两个数组指向同一个空间的内存图
注当两个数组指向同一个小空间时其中一个数组对小空间中的值发生了改变那么其他数组再次访问的时候都是修改之后的结果了。