当前位置: 首页 > news >正文

JAVA系列之数组的秘密(数组的一般用法+力扣 斯坦福大学练习精解)

大佬们好呀~
更多精彩: 个人主页
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,intdouble 类型的数组容器可储存(byte,short,int,long,float,double)(大)double>float>long>int>short>byte(小)大可以储存小(隐式转换),小不可以储存大!(强制转换)

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

四、数组的地址值

当我们定义一个数组,其中含有三个元素(1,2,3),打印出这个数组arry.

eg:
int arry []={1,2,3};
System.out.println(arry);

运行展示:

[I@10f87f48

运行出来会出现一段乱码,当然乱码并不是真的乱码,而是数组的地址值

1.1地址值:

就是表示数组在内存中的位置。

1.2拓展:

解释一下地址值的格式含义:

[:表示当前是一个数组

I:表示当前数组里面的元素是int类型的

@:表示一个间隔符号(固定格式)

10f87f48:这才是数组真正的地址值(十六进制)

平时我们习惯性的会把这个整体叫做数组的地址值

五、数组的元素访问

1.格式:

数组名[索引];
eg:
nums[0];

2.索引:

数值1234
索引(下标)0123

特点:从0开始,逐个+1增长,连续不断

3.获取数组中的元素

int [] arr={11,12,13};
int num=arr[0];
System.out.println(num);简单写法:
int [] arr={11,12,13};
System.out.println(arr[0]);
run:
11

4.把数据存入到数组中

格式:
数组名[索引]=具体数据/变量arr[0]=100
public 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 (i=0;i<=4;i++){System.out.println(arr[i]);
}

我们在写循环时可能会遇到数组长度的问题,我们有一个官方写法:

调用方式:
数组名.length
System.out.println(arr.length);
//打印数组的长度

2.拓展:

自动的快速生成数组的遍历方式

由IDEA提供的,数组名.fori回车,就会出现以下代码。

for (int i=0;i<arr.length;i++){System.out.println(arr[i]);
}

3.练习:

3.1遍历数组求和

//将数组中的11,22,33,44,55,66,77,88,99求和
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 i=0 ; i<num.length ; i++){sum+=num[i];}System.out.println(sum);}
}

3.2条件变化

//如果是奇数,将当前数字扩大两倍,偶数将当前数字变成1/2
int [] num={1,2,3,4,5,6,7,8,9,10};
for (i=0 ; i<num.length ; i++){if (num[i]%2==0){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 (i=0 ; i<num.length ; i++){if (num[i]%2==0){num[i]/=2;}else{num[i]*=2;}
}
for (i=0 ; i<num.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
引用数据类型:默认初始化值null

2.动态初始化与静态初始化的区别

动态:

含义:手动指定数组的长度,由系统给出默认初始化值

只明确元素的个数,不明确具体数值,推荐使用动态初始化

eg:

使用数组容器来存储键盘录入的5个整数

int [] arr = {????};
int [] arr = new int[5]

静态

含义:手动指定数组元素,系统会根据元素个数,计算出数组的长度。

需求中已经明确了要操作的具体数据,直接静态初始化即可。

eg:

将全班 的学生成绩存入数组中11,22,33

int [] nums= {11,22,33};

八、数组的常见问题

索引越界异常:访问了不存在的索引

索引的范围:0~数组的长度-1

九、数组的常用操作

1.求最值

//已知数组元素为{33,5,22,44,55},请找出数组中最大的值并打印在控制台。
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.交换数据

//将数组{1,2,3,4,5}顺序交换
public class jiaoone {public static void main(String[] args) {int [] arr={1,2,3,4,5};//从两头开始遍历,然后交换for(int i=0 , j=arr.length-1 ; i<j ; i++,j--){//找一个工具人,方便交换int temp=arr[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 ran=new Random();int random=ran.nextInt(nums.length);int [] nums={1,2,3,4,5};for (int i = 0; i < nums.length; i++) {//遍历数组拿着它和随机索引交换int temp=nums[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了多次,那么在堆里面有多个小空间,每个小空间中都有各自的数据。
在这里插入图片描述

两个数组指向同一个空间的内存图:

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

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

相关文章:

JAVA系列之数组的秘密(数组的一般用法+力扣 斯坦福大学练习精解)

大佬们好呀~ 更多精彩&#xff1a; 个人主页 JAVA专栏 文章目录 一、数组的概述1.1什么是数组&#xff1f;1.2注意:1.3建议&#xff1a; 二、数组的定义1.格式&#xff1a; 三、数组的静态初始化1.数组的初始化:2.静态初始化&#xff1a;格式&#xff1a;数组的长度&#xff1a…...

探索飞鹤奶粉奥秘,领会科技魅力

在科技迅猛发展的当下&#xff0c;AI 技术正深刻重塑各行业格局。乳制品行业亦不例外。近日&#xff0c;长江商学院「AI 未来空间站」的同学们深入走访了飞鹤集团&#xff0c;探寻其在数字化浪潮中的创新实践与卓越成就。 在飞鹤的智能化生产车间&#xff0c;同学们目睹了高度自…...

【数据仓库】StarRocks docker部署

StarRocks docker部署 一、环境准备安装 docker 及 docker-compose操作系统相关禁用及配置【CentOS Linux 7 (Core)】 二、StarRocks-v2.5【存算一体,3FE,3BE】BE节点配置FE节点配置服务启动BE节点添加FE 节点添加 三、监控(待完善)四、VIP Nginx Keepalived(待完善)五、Star…...

Java虚拟机面试题:内存管理(下)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

R语言用逻辑回归贝叶斯层次对本垒打数据与心脏移植数据后验预测检验模拟推断及先验影响分析|附数据代码...

全文链接&#xff1a;https://tecdat.cn/?p40152 在统计学领域中&#xff0c;层次建模是一种极为强大且实用的工具。它能够巧妙地处理复杂的数据结构&#xff0c;通过分层的方式对数据进行建模。在贝叶斯统计的框架内&#xff0c;层次建模优势尽显&#xff0c;其可以有效地融合…...

网页制作02-html,css,javascript初认识のhtml的文字与段落标记

用一首李白的将进酒,对文字与段落标记进行一个简单的介绍演示&#xff1a; 目录 一、标题字 1、标题字标记h 2、标题字对其属性align 二、文本基本标记 1、字体属性face 2、字号属性size 3、颜色属性 Color 三、文本格式化标记 1、粗体标记 b &#xff0c;strong 2、…...

【SpringBoot苍穹外卖】debugDay04

一、getById 与 new 我在修改数据时&#xff0c;产生疑问&#xff0c;注释掉是我一开始写得&#xff0c;new对象是答案提供的&#xff0c;我就好奇两者之间区别。 1. 使用 setmealMapper.getById 获取现有对象 Setmeal setmeal setmealMapper.getById(setmealDTO.getId()); …...

C++中的顺序容器(一)

文章目录 顺序容器概述所有容器类型都支持的操作迭代器容器定义与初始化将一个容器初始化为另一个容器的拷贝标准库array具有固定大小 赋值和swap关系运算符 顺序容器的特有操作向顺序容器添加元素访问元素删除元素特殊的forward_list操作改变容器的大小容器操作可能是迭代器失…...

【复现DeepSeek-R1之Open R1实战】系列4:跑通GRPO!

目录 1 配置环境2 训练2.1 命令和配置参数2.2 num_generations2.2.1 参数定义2.2.2 参数含义2.2.3 示例2.2.4 使用场景2.2.5 示例代码 2.3 显存占用和耗时 3 结果 1 配置环境 关于环境配置&#xff0c;可以参考这篇博文&#xff1a;【复现DeepSeek-R1之Open R1实战】系列1&…...

Redis原理简述及发布订阅消息队列

目录 1 什么是Redis 2 Redis 非阻塞IO内部原理 2.1 IO多路复用策略 2.2 Reactor设计模式 3 基于PubSub的消息队列&#xff08;发布-订阅&#xff09; 由于集群之后存在多台服务器&#xff0c;并且不同客户端连接的可能是不同的服务器&#xff0c;因此在聊天过程中涉及到服…...

ThreadLocal为什么会内存溢出

每个线程(Thread 对象)内部维护一个 ThreadLocalMap,用于存储该线程的所有 ThreadLocal 变量的键值对: ThreadLocalMap虽然是ThreadLocal的静态内部类,但是Thread 对象的属性,当线程存活时ThreadLocalMap不会被回收。 Key:ThreadLocal 实例的 弱引用(WeakReference)。…...

假面与演员:到底是接口在使用类,还是类在使用接口?编程接口与物理接口的区别又是什么?

前言&#xff1a;本篇文章解释了接口学习过程中的2个常见问题&#xff0c;一个是“为什么是类在使用接口”&#xff0c;另一个一个是“编程接口与物理接口的差异源于所处的抽象层次和交互模式的不同”&#xff0c;旨在揭示编程接口的本质。 Part1.是类在使用接口 当学习接口时…...

数据结构——Makefile、算法、排序(2025.2.13)

目录 一、Makefile 1.功能 2.基本语法和相关操作 &#xff08;1&#xff09;创建Makefile文件 &#xff08;2&#xff09;编译规则 &#xff08;3&#xff09;编译 &#xff08;4&#xff09;变量 ①系统变量 ②自定义变量 二、 算法 1.定义 2.算法的设计 &#xff…...

算法之 跳跃游戏

文章目录 55.跳跃游戏思路参考&#xff1a;56.合并区间 55.跳跃游戏 55.跳跃游戏 灵神思路 思路分析&#xff1a; 两种思路&#xff0c;思路1是我们可以直接维护当前到达i的时候所能到达的最右的边界mr&#xff0c;如果i>mr就说明无法到达i,否则就是可以到达&#xff1b;…...

C#中的图形渲染模式

在C#中&#xff0c;图形模式通常用于定义如何渲染或处理图形。可以枚举定义如下四种图形模式&#xff1a;AUTO、GDI、DIB 和 FBO。这些模式可能用于指定不同的图形渲染技术或后端。下面是对这些模式的详细解释&#xff1a; 1. AUTO (自动模式) 含义&#xff1a;自动选择最适合…...

二.数据治理流程架构

1、数据治理流程架构核心思想&#xff1a; 该图描绘了一个以数据标准规范体系为核心&#xff0c;大数据生命周期管理为主线&#xff0c;数据资源中心为依托&#xff0c;并辅以数据质量管理和大数据安全与隐私管理的数据治理流程架构。它旨在通过规范化的流程和技术手段&#x…...

瑞萨RA-T系列芯片ADCGPT功能模块的配合使用

在马达或电源工程中&#xff0c;往往需要采集多路AD信号&#xff0c;且这些信号的优先级和采样时机不相同。本篇介绍在使用RA-T系列芯片建立马达或电源工程时&#xff0c;如何根据需求来设置主要功能模块ADC&GPT&#xff0c;包括采样通道打包和分组&#xff0c;GPT触发启动…...

扩散模型中的马尔可夫链设计演进:从DDPM到Stable Diffusion全解析

一、技术原理与数学推导&#xff08;附核心公式&#xff09; 1.1 扩散过程数学建模 马尔可夫链前向过程定义&#xff1a; q(x_{1:T}|x_0) \prod_{t1}^T q(x_t|x_{t-1})噪声调度函数&#xff08;以余弦调度为例&#xff09;&#xff1a; \beta_t \frac{1 - \cos(\pi t/T)}…...

通俗诠释 DeepSeek-V3 模型的 “671B” ,“37B”与 “128K”,用生活比喻帮你理解模型的秘密!

欢迎来到涛涛聊AI。 在DeepSeek-V3模型的参数描述中&#xff0c;你可能会看到类似“671B 37B 128K”这样的标记。这些字母和数字的组合看起来像密码&#xff0c;但其实它们揭示了模型的“大脑容量”和“工作方式”。我们用日常生活的比喻来解释&#xff1a; 一、数字含义&…...

大模型常识:什么是大模型/大语言模型/LLM

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 一、什么是语言模型? 那么什么是语言模…...

非科班,我转大模型成功了吗

正式转码&#xff08;开始刷算法题&#xff0c;学八股&#xff0c;做项目&#xff0c;找实习&#xff09;到现在过去了13个月。由于之前完全没有大模型经验&#xff0c;根本找不到大模型对口实习我笑死&#xff0c;找的是cv&#xff0c;AI图像的实习&#xff0c;但歪打正着做了…...

PCB原型制造质量对电子产品开发的关键影响

1. PCB原型制造质量的核心价值在电子产品开发流程中&#xff0c;PCB原型阶段常被误解为"简单打样"&#xff0c;但实际它承载着远超表面价值的关键使命。我经历过数十个硬件项目后发现&#xff0c;原型板质量直接决定了后续开发60%以上的问题排查效率。当设计团队拿到…...

2026年“史上最大IPO”争夺战:OpenAI营收承压,Anthropic后来居上?

科技巨头站到聚光灯下近日&#xff0c;据外媒报道&#xff0c;OpenAI未能完成今年第一季度的内部营收目标&#xff0c;ChatGPT的用户增长也已连续数月低于预期。消息传出的时机格外微妙&#xff0c;就在几周前&#xff0c;这家公司刚刚完成了一笔1220亿美元的私募融资&#xff…...

仅限前200名车载开发者获取:Dify车规版定制内核补丁包(含SPI Flash磨损均衡优化+看门狗协同重启模块)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Dify车载智能问答系统开发概述 Dify 是一个开源的低代码大模型应用开发平台&#xff0c;支持快速构建具备上下文感知、多轮对话与知识增强能力的智能问答系统。在车载场景中&#xff0c;其轻量级部署能…...

睡眠质量资产量化程序,颠覆健康无收益,睡眠数据脱敏上链,可用于健康研究并获得奖励。

定位依然是&#xff1a;技术演示 思路参考&#xff0c;不涉及医疗诊断&#xff0c;不构成金融产品&#xff0c;也不承诺任何收益。 一、实际应用场景描述 在现代社会中&#xff1a; - 个人睡眠数据被智能手表、手环持续采集 - 数据通常停留在厂商服务器或 App 中 - 用户难以…...

HS2-HF_Patch:一站式解决《Honey Select 2》语言障碍和功能限制的终极增强补丁

HS2-HF_Patch&#xff1a;一站式解决《Honey Select 2》语言障碍和功能限制的终极增强补丁 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾因《Honey S…...

深入探讨Haskell中的Combinator

引言 在Haskell编程中,combinator是一种非常有用的函数抽象工具,可以简化代码并提高代码的可读性和复用性。今天,我们将深入探讨一个特定的combinator,它在Haskell标准库中被称为on函数。本文将通过实例展示如何使用这个combinator,并讨论其在实际编程中的应用。 什么是…...

免费本地大模型神器!一行命令开启AI自由,Ollama凭什么狂飙月下载5200万?

Ollama是一款免费的本地大模型运行工具&#xff0c;无需上云、不泄露数据&#xff0c;通过一行命令即可在个人电脑上运行DeepSeek-R1、Qwen3、Llama4等大型模型。它支持200开源模型&#xff0c;安装配置简单&#xff0c;无需复杂环境设置。Ollama提供多种模型量化选项&#xff…...

手把手教你用Inkscape+Unicorn插件,为80mm绘图仪生成G-code文件

手把手教你用InkscapeUnicorn插件&#xff0c;为80mm绘图仪生成G-code文件 在创客和DIY爱好者的世界里&#xff0c;三轴平台&#xff08;XYZ平台&#xff09;是最基础也最实用的工具之一。无论是绘制简单的文字还是复杂的图案&#xff0c;G-code文件都是控制这些平台运动的核心…...

AI协同认知:逻辑与梦境融合的创意生成技术

1. 项目概述&#xff1a;当AI学会"做梦"意味着什么去年我在调试一个创意生成AI时&#xff0c;偶然发现一个有趣现象&#xff1a;当模型在低温度参数下运行后&#xff0c;再突然切换到高随机性状态时&#xff0c;会产生类似"梦境联想"的创意组合。这个意外发…...