9.Java数组知识大全

news/2024/11/27 19:08:30/

文章目录

  • 前言
  • 一、数组介绍
  • 二、数组的定义域静态初始化
  • 三、数组元素访问
    • 数组地址中的小拓展:
  • 四、数组遍历
    • 1.获取数组里面的元素
    • 2.把数据存储到数组中
    • 3.遍历数组的最快方式
    • 4.遍历数组并求和
    • 5.统计个数
    • 6.变化数据
  • 五、数组动态初始化
    • 1.数组默认初始化值的规律
    • 2.数组动态初始化和静态初始化的区别
  • 六、数组内存图
    • 1.Java内存分配
    • 2.数组的内存图
    • 3.总结:
    • 4.两个数组指向同一个空间的内存
      • 总结:
  • 七、数组常见问题
    • 小结:
  • 八、数组常见操作
    • 1.求最值
    • 2.遍历数组求和
    • 3.交换数组中的数据
      • 方法一:
      • 方法二:
    • 4.打乱数组中的数据
  • 总结


前言

一、数组介绍

在这里插入图片描述
在这里插入图片描述

二、数组的定义域静态初始化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public class test8 {public static void main(String[] args) {//格式//静态初始化//完整格式//数据类型 [] 数组名=new 数据类型[]{元素1,元素2...};//简化格式//数据类型 [] 数组名={元素1,元素2...};//需求1:定义数组存储5个学生的年龄int[] arr1=new int[]{11,12,13,14};int[] arr2={11,12,13,14};//需求2:定义数组存储3个学生的姓名String[] arr3=new String[]{"zhangsan","lisi","wangwu"};String[] arr4={"zhangsan","lisi","wangwu"};//需求3:定义数组存储4个学生的身高double[] arr5=new double[]{1.93,1.65,1.68,1.71};double[] arr6={1.93,1.65,1.68,1.71};}
}

三、数组元素访问

在这里插入图片描述

数组地址中的小拓展:

解释一下地址值的格式含义
[: 表示当前是一个数组
D: 表示当前数组里面的元素都是double类型的
I: 表示当前数组里面的元素都是int类型的
@: 表示一个间隔符号(固定格式)
776ec8df才是数组真正的地址值(十六进制)
平时我们习惯吧这个整体叫做数组的地址值

public class test8 {public static void main(String[] args) {//格式//静态初始化//完整格式//数据类型 [] 数组名=new 数据类型[]{元素1,元素2...};//简化格式//数据类型 [] 数组名={元素1,元素2...};//需求1:定义数组存储5个学生的年龄int[] arr1=new int[]{11,12,13,14};System.out.println(arr1);
//        int[] arr2={11,12,13,14};
//
//        //需求2:定义数组存储3个学生的姓名
//        String[] arr3=new String[]{"zhangsan","lisi","wangwu"};
//        String[] arr4={"zhangsan","lisi","wangwu"};
//
//        //需求3:定义数组存储4个学生的身高
//        double[] arr5=new double[]{1.93,1.65,1.68,1.71};
//        double[] arr6={1.93,1.65,1.68,1.71};/*扩展:解释一下地址值的格式含义[: 表示当前是一个数组D: 表示当前数组里面的元素都是double类型的I: 表示当前数组里面的元素都是int类型的@: 表示一个间隔符号(固定格式)776ec8df才是数组真正的地址值(十六进制)平时我们习惯吧这个整体叫做数组的地址值*/}
}

在这里插入图片描述

四、数组遍历

1.获取数组里面的元素

2.把数据存储到数组中

在这里插入图片描述

public class test9 {public static void main(String[] args) {/*利用索引对数组中的元素进行访问1.获取数组里面的元素格式: 数组名[索引]*/int[] arr={1,2,3,4};/*获取数组里面的第一个元素其实就是0所以上对应的元素int number=arr[0];System.out.println(number);//1获取数组中1索引上对应的数据,并直接打印出来System.out.println(arr[1]);//2*///2.把数据存储到数组中//格式: 数组名[索引]=具体数据/变量;//细节:一旦覆盖之后,原来的数据就不存在了arr[0]=100;System.out.println(arr[0]);}
}

在这里插入图片描述
在这里插入图片描述

3.遍历数组的最快方式

public class test10 {public static void main(String[] args) {//1.定义数组int arr[]={1,2,3,4,5};//2.获取数组里面所有的元素//格式:  数组名[索引]/*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]);*///利用循环改进代码//开始条件:0//结束条件:数组的长度-1(最大索引)//但是当原始数组里面的元素过多,数量不便于数出时,5的位置处该写什么呢?/*for (int i = 0; i < 5; i++) {//i:0,1,2,3,4System.out.println(arr[i]);}*///在Java当中,关于数组的一个长度属性,length//调用方式:  数组名.lengthfor (int i = 0; i < arr.length; i++) {//i:0,1,2,3,4System.out.println(arr[i]);}//扩展://自动的快速生成数组的遍历方式//idea提供的//数组名.forifor (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}}

4.遍历数组并求和

在这里插入图片描述

public class test11 {public static void main(String[] args) {/*定义一个数组,存储1,2,3,4,5遍历数组得到每一个元素,求数组里面所有的数据和*///分析//1.定义一个数组并添加数据int[] arr={1,2,3,4,5};//求和变量int sum=0;//2.遍历数组得到一个数据,累加求和for (int i = 0; i < arr.length; i++) {//i 依次表示数组里面的每一个索引//arr[i] 依次表示数组里面的每一个元素sum=sum+arr[i];}//当循环结束之后,sum的值就是累加之后的结果System.out.println(sum);}
}

在这里插入图片描述

5.统计个数

在这里插入图片描述

import javax.imageio.metadata.IIOMetadataFormatImpl;public class test12 {/*定义一个数组存储1,2,3,4,5,6,7,8,9,10遍历数组的到每一个元素,通技术组里面一共有多少能被3整除的数字*/public static void main(String[] args) {//分析://1.定义一个数组,存储1,2,3,4,5,6,7,8,9,10int[] arr={1,2,3,4,5,6,7,8,9,10};//定义一个变量,用来统计次数int count=0;//2.遍历数组得到每一个元素for (int i = 0; i < arr.length; i++) {//i 表示数组里面的每一个索引//arr[i] 表示数组里面的每一个元素//3.判断当前元素是否为3的倍数,如果是的话,统计变量自增一次if (arr[i] % 3 == 0) {count++;}}System.out.println("数组中能被3整除的数字有"+count+"个");}}

在这里插入图片描述

6.变化数据

在这里插入图片描述

public class test13 {public static void main(String[] args) {/*定义一个数组存储1,2,3,4,5,6,7,8,9,10遍历得到每一个元素要求:如果是奇数,将当前数字扩大两倍如果是偶数,将当前数字变为原来的1/2*///分析//1.定义一个数组存储数据int[] arr={1,2,3,4,5,6,7,8,9,10};//2.遍历数组得到每一个元素for (int i = 0; i < arr.length; i++) {if(arr[i]%2==0){arr[i]=arr[i]/2;}else {arr[i]=arr[i]*2;}}//遍历数组for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}
}

在这里插入图片描述

五、数组动态初始化

在这里插入图片描述

1.数组默认初始化值的规律

    整数类型:默认初始化值0小数类型:默认初始化值0.0字符类型:默认初始化值'\u0000' 空格布尔类型:默认初始化值 false引用数据类型:默认初始化值 null
public class test14 {public static void main(String[] args) {/*定义一个数组,用来存班级中50个学生的姓名姓名未知,等学生报名之后,再进行添加*///格式://数据类型[] 数组名=new 数组类型[数组的长度]//在创建的时候,由我们自己指定数组的长度,由虚拟机给出默认的初始化值String[] arr=new String[50];//添加学生arr[0]="zhangsan";arr[1]="lisi";//获取System.out.println(arr[0]);//zhangsanSystem.out.println(arr[1]);//lisiSystem.out.println(arr[2]);//打印出来的是默认初始化值null//数组默认初始化值的规律//整数类型:默认初始化值0//小数类型:默认初始化值0.0//字符类型:默认初始化值'\u0000' 空格//布尔类型:默认初始化值 false//引用数据类型:默认初始化值 nullint[] arr2=new int[3];System.out.println(arr2[0]);//0System.out.println(arr2[1]);//0System.out.println(arr2[2]);//0}
}

在这里插入图片描述

2.数组动态初始化和静态初始化的区别

在这里插入图片描述

六、数组内存图

1.Java内存分配


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.数组的内存图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
s
在这里插入图片描述

3.总结:

(1)只要是new出来的,一定是在堆里面开辟了一个小空间
(2)如果new了很多次,那么在堆里面有多个小空间,每个小空间都有各自的数据

4.两个数组指向同一个空间的内存

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结:

当两个数组指向同一个小空间时,其中一个数组对小空间中的值发生了改变,那么其他数组再次访问的时候都是修改之后的结果了

七、数组常见问题

在这里插入图片描述

public class test15 {public static void main(String[] args) {//1.定义一个数组int[] arr={1,2,3,4,5};//长度:5//最小索引:0//最大索引:4(数组的长度-1)System.out.println(arr[10]);//小结://索引越界异常//原因:访问了不存在的索引//避免:索引的范围}
}

在这里插入图片描述

小结:

    索引越界异常原因:访问了不存在的索引避免:索引的范围

八、数组常见操作

在这里插入图片描述

1.求最值

在这里插入图片描述
在这里插入图片描述

public class test16 {public static void main(String[] args) {//定义数组求最大值: 33,5,22,44,55//扩展问题//1.根据求最大值的思路,自己改写一下求最小值//2.为什么max要记录为arr[0],默认值不能为0呢?//不能写0,当数组元素里面有负数时,这时可能最终结果是数组原来不存在的数据//max的初始值一定要是数组中的值//循环的开始条件一定是0吗//循环的开始条件如果是0,那么第一次循环的时候就是自己和自己比了一下,对结果没有任何影响,但是效率偏低//为了提高效率,减少一次循环的次数,循环开始条件可以改为1//1.定义数组用来存储5个值int[] arr={33,5,22,44,55};//2.定义一个变量max用来存储最大值//临时认为0索引的数据是最大的int max=arr[0];//3.循环获取数组中的每一个元素//拿着每一个元素和max比较for (int i = 0; i < arr.length; i++) {//i索引 arr[i]元素if(arr[i]>max){max=arr[i];}}//4.当循环结束之后,max记录的是数组中的最大值System.out.println(max);//55}
}

在这里插入图片描述

2.遍历数组求和

在这里插入图片描述

import java.util.Random;public class test17 {public static void main(String[] args) {/*需求:生成10个1-100之间的随机数存入数组1.求出所有数据的和2.求所有数据的平均数3.统计有多少个数据比平均数小*///分析://1.定义数组:int[] arr=new int[10];//2.把随机数存入到数组中Random r=new Random();for (int i = 0; i < arr.length; i++) {int number=r.nextInt(100)+1;//把生成的随机数添加到数组中arr[i]=number;}//1.求和int sum=0;for (int i = 0; i < arr.length; i++) {sum=sum+arr[i];}System.out.println("数组中所有数据的和为:"+sum);//2.平均数int avg=sum/arr.length;System.out.println("数组中平均数为:"+avg);//3.统计有多少个数据比平均数少int count=0;for (int i = 0; i < arr.length; i++) {if(arr[i]<avg){count++;}}System.out.println("在数组中,一共有"+count+"个数据,比平均数小");//遍历数据,验证答案for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]+" ");}}
}

在这里插入图片描述

3.交换数组中的数据

在这里插入图片描述

方法一:

public class test18 {public static void main(String[] args) {/*需求:定义一个数组,将数组中0索引和最大索引的值进行交换*/int[] arr={1,2,3,4,5};//利用第三方变量进行交换int temp=arr[0];arr[0]=arr[4];arr[4]=temp;//遍历数组for (int i = 0; i < arr.length; i++) {System.out.println(arr[i] + " ");}}
}

在这里插入图片描述

方法二:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一直交换到 i = j 或者 i > j

public class test19 {public static void main(String[] args) {/*需求:定义一个数组,存入1,2,3,4,5,交换首尾索引对应的元素交换前:1,2,3,4,5交换后:5,2,3,4,1*/int[] arr={1,2,3,4,5};//利用循环去交换数据for (int i = 0,j=arr.length-1; i <j; i++,j--) {//交换变量i和变量j指向的元素int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}//当循环结束之后,那么数据中的数据就实现了首尾交换for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]+" ");}}
}

在这里插入图片描述

4.打乱数组中的数据

在这里插入图片描述

import java.util.Random;public class test20 {public static void main(String[] args) {/*需求:定义一个数组,存入1~5,要求打乱数组中所有数据的顺序*///难点://如何获取数组中的随机索引// int[] arr={1,2,3,4,5};//索引范围: 0 1 2 3 4
//        Random r=new Random();
//        int randomindex=r.nextInt(arr.length);
//        System.out.println(randomindex);//1.定义数组存储1-5int[] arr={1,2,3,4,5};//2.循环遍历数组,从0索引开始打乱数据的顺序Random r=new Random();for (int i = 0; i < arr.length; i++) {//生成一个随机索引int randomindex=r.nextInt(arr.length);//拿着随机索引指向的元素,与i指向的元素进行交换int temp =arr[i];arr[i]=arr[randomindex];arr[randomindex]=temp;}//当循环结束之后,那么数组中所有的数据已经打乱顺序了for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]+" ");}}
}

在这里插入图片描述
在这里插入图片描述


总结

今天的内容你是否有所收获呢友友们🥰如果有写的不对的地方,欢迎大家帮我指正.最后,希望友友们点赞收藏一下博客关注后续的Java学习内容哦~😘💕💕


http://www.ppmy.cn/news/19320.html

相关文章

零基础学JavaWeb开发(二十三)之 springmvc入门到精通(3)

5、springspringmvcmybatis整合 5.1、项目技术需求分析 1.使用ssmlayui技术开发 对用户表数据实现增删改查 采用前后端分离架构模式 5.2、SSM环境的整合之提供增删改查 整合数据库表结构 CREATE TABLE mayikt_users (id int NOT NULL AUTO_INCREMENT,name varchar(255) CH…

final的一个重要用途-宏变量和未初始化问题

/*** author 张家琛* version 1.0* date 2023/1/24 20:23*/ public class FinalDemo {public static void main(String[] args) {final var a5;System.out.println(a);} } 对于上面的程序来说&#xff0c;变量a其实根本就不存在&#xff0c;这段代码本质上执行的是转换成的&am…

Intellij IDEA 丢失 Project Structure 问题

今天遇到一个奇怪的问题&#xff1a;Intellij 工程&#xff08;经过数次编译后保存&#xff09;关闭后再打开&#xff0c;发现原有的 artifacts 工程设置 project structure 全部丢失了。 原因可能是&#xff0c;对这个工程文件夹进行了一次复制备份&#xff0c;备份工程打开也…

二叉树基础oj练习

1.单值二叉树 题目: 力扣https://leetcode.cn/problems/univalued-binary-tree/ 思路: 单值二叉树 root和左右孩子的值相等 左子树是单值二叉树 右子树是单值二叉树 代码: /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeN…

01网络协议:从TCP协议到RPC协议都经历了哪些?

无论是TCP/IP四层协议还是OSI七层网络协议,传输层的TCP都是非常重要的一个网络协议,众所周知TCP是建立在IP协议之上的点对点可靠的传输协议,不同于IP和UDP,TCP有三次握手、四次挥手等机制可以确保客户端和服务端建立安全的连接和释放连接,并提供拥塞控制、滑动窗口等数据传…

离线召回与排序介绍

3.3 离线召回与排序介绍 学习目标 目标 了解召回排序作用知道头条推荐召回排序设计应用 无 3.3.1 召回与排序介绍 召回&#xff1a;从海量文章数据中得到若干候选文章召回集合(数量较多) 排序&#xff1a;从召回集合中读取推荐文章&#xff0c;构建样本特征进行排序过滤筛选…

【JavaSE专栏4】关键字、标识符和命名规范

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

JVM快速入门学习笔记(三)

9. 栈 栈&#xff1a;8大基本类型对象引用 栈运行原理&#xff1a;栈帧 程序正在执行的方法&#xff0c;一定在栈的顶部 9.1 JVM数据区 先上一张Java虚拟机运行时数据区中堆、栈以及方法区存储数据的概要图&#xff0c;如下所示&#xff1a; 9.2 堆 堆是存储时的单位&…