Java数组完全指南:从菜鸟到高手的必备手册

大厂首发:springcloud菜鸟教程 第一个:Alibaba[搜索推荐] 一面:算法题:长度为n的数组里放了n+1个大小在[1,n]的数,必然至少有一个重复的数,找出来 二面:概率题:求一根绳子被切两刀能组成一个三角形的概率。 三面主管面:FM推导,deepfm原理,graph embedding,问了之前的一些项目。 四面交叉面:模型上线时应该注意的事,如果请求过高模型服务挂了怎么办,tensorflow和torch的区别,如何降低模型复杂度。 第二个:百度 原生商业推广部 一面:算法题:快排非递归,旋转有序数组找某个值 二面:算法题: 阅读详情

一、数组到底是什么?(初识篇)

数组就像超市的储物柜!每个小格子(元素)都有自己的编号(索引),而且必须存放同类型的物品(数据)。这个设定看似简单,却暗藏玄机!(划重点)

新手最常问的三个问题:

  1. 为什么索引从0开始?(计算机内存地址计算更方便)
  2. 数组长度能改吗?(一旦创建就固定,想扩容要新建数组)
  3. 可以混装不同类型数据吗?(除非用Object数组,但强烈不推荐!)

二、数组操作六步走(实战篇)

1. 声明数组的三种姿势

// 最常用写法(老司机专用)
int[] scores; 

// C语言风格写法(不推荐使用)
int ages[];

// 动态初始化(适合不确定内容的场景)
double[] prices = new double[5];

2. 初始化骚操作

// 标准初始化(适合已知数据)
String[] weekDays = {"周一","周二","周三"};

// 匿名数组(方法参数传递时超实用)
printArray(new int[]{1,3,5,7});

// 二维数组的两种写法(效果完全一样)
int[][] matrix1 = new int[3][4];
int matrix2[][] = {{1,2},{3,4}};

3. 元素访问的坑点预警

int[] nums = {10,20,30};
System.out.println(nums[1]); // 输出20
nums[3] = 40; // 这里会爆炸!ArrayIndexOutOfBoundsException

(超级重要)访问数组时:

  • 索引范围:0 到 (数组长度-1)
  • 越界访问直接报错
  • 推荐先判断索引有效性

4. 遍历的四种流派

// 传统for循环(精确控制型)
for(int i=0; i<arr.length; i++){
    System.out.println(arr[i]);
}

// 增强for循环(简洁高效型)
for(int num : arr){
    System.out.println(num);
}

// while循环(特殊场景用)
int index = 0;
while(index < arr.length){
    System.out.println(arr[index++]);
}

// Arrays工具类(装逼专用)
Arrays.stream(arr).forEach(System.out::println);

5. 多维数组的打开方式

// 真正的二维数组
int[][] chessBoard = new int[8][8];

// 不规则数组(每行长度不同)
String[][] nameTable = new String[3][];
nameTable[0] = new String[2];
nameTable[1] = new String[3];

6. 常用工具方法大全

// 数组排序(升序)
Arrays.sort(arr);

// 二分查找(必须先排序!)
int index = Arrays.binarySearch(arr, target);

// 数组转字符串(调试神器)
System.out.println(Arrays.toString(arr));

// 数组复制(三种方式任选)
int[] copy1 = Arrays.copyOf(arr, arr.length);
int[] copy2 = System.arraycopy(...);
int[] copy3 = arr.clone();

三、高手进阶秘籍(原理篇)

内存存储真相

数组在内存中是连续存储的!这个特性带来两大优势:

  1. 随机访问速度快(时间复杂度O(1))
  2. 缓存命中率高(CPU喜欢连续内存块)

但这也导致:

  1. 插入/删除效率低(需要移动元素)
  2. 长度固定(动态扩容成本高)

性能优化技巧

  • 预估容量:尽量一次性分配足够空间
  • 批量操作:使用System.arraycopy()代替循环
  • 避免装箱:优先使用基本类型数组
  • 并行处理:利用Arrays.parallelSort()

四、数组 vs 集合(抉择时刻)

什么时候该用数组?什么时候用ArrayList?

(敲黑板)记住这个决策树:

  1. 需要基本类型 → 选数组
  2. 长度固定不变 → 选数组
  3. 要求极致性能 → 选数组
  4. 其他情况 → 选集合

五、常见翻车现场(避坑指南)

1. 空指针异常

int[] arr;
System.out.println(arr[0]); // 还没初始化!

2. 长度获取错误

int[][] arr = new int[3][];
System.out.println(arr.length); // 输出3(不是总元素数)

3. 浅拷贝陷阱

int[] original = {1,2,3};
int[] copy = original.clone();
copy[0] = 100;
System.out.println(original[0]); // 还是1(基本类型安全)

(但如果是对象数组…)

Person[] people = {new Person("张三")};
Person[] copy = people.clone();
copy[0].setName("李四");
System.out.println(people[0].getName()); // 输出李四!

六、项目实战案例(学以致用)

成绩统计系统

public class ScoreAnalyzer {
    public static void main(String[] args) {
        int[] scores = readScores(); // 读取成绩
        printStatistics(scores);
    }
    
    private static void printStatistics(int[] arr) {
        Arrays.sort(arr);
        System.out.println("最高分:" + arr[arr.length-1]);
        System.out.println("最低分:" + arr[0]);
        System.out.println("平均分:" + Arrays.stream(arr).average());
    }
}

图像像素处理

// 表示800x600的RGB图像
int[][][] image = new int[800][600][3];

// 给某个像素设置颜色
image[100][200][0] = 255; // 红色通道
image[100][200][1] = 0;   // 绿色通道
image[100][200][2] = 0;   // 蓝色通道

七、终极思考题(检验成果)

  1. 如何实现数组的环形缓冲区?
  2. 当二维数组作为方法参数时,为什么可以省略第二维?
  3. 为什么说Arrays.asList()返回的List不能修改长度?
  4. 如何用数组实现LRU缓存淘汰算法?

(答案都在前面的内容里,仔细找找看!)

写在最后

数组就像编程世界的乐高积木,看似简单,组合起来却能构建出无数精彩的应用场景。作者当年初学Java时,曾经花了一周时间用数组实现了一个简易版的Excel表格(虽然现在看惨不忍睹),但正是这种实践让我真正理解了数组的精髓。希望各位在学习过程中,多动手实现一些有趣的小项目,你会发现数组比你想象的更强大!

Java编程入门必备知识精讲 本文还有配套的精品资源,点击获取 简介:Java是一种面向对象的编程语言,以其跨平台、高性能和丰富的类库而闻名。本课程旨在为初学者提供一个全面的Java入门知识体系,内容涵盖从环境搭建到基础语法、数据类型、流程控制、面向对象编程、异常处理、集合框架、I/O操作、多线程以及图形用户界面设计等。通过理论知识与实践相结合的方式,帮助学习者快速掌握Java编程的核心概念和技能,为后... 阅读详情

相关推荐

ESP32使用microPython控制240x240彩色屏幕显示中文

王铭东老师详细讲解了讲了关于240x240屏幕的一些基础东西,我这里在原功能的基础上拓展了中文显示的功能,顺带修改了实际操作过程中程序中遇到的一些问题。

m0_59452630的博客 1万+

Java入门篇 之 数组篇

今日份励志文案。

2201_75886757的博客 674

算法竞赛入门到进阶 --- 完整学习路线(含知识点讲解)

前言: 咳咳,接触算法竞赛也有一年了,却从来都没有进行过一次系统的学习,稀里糊涂的就这么搞了半年,如今,我决定认认真真的进行一次系统的复盘。嗯嗯,先把大体路线列出来,然后往后每天搞几篇,可能大三能完成,可能永远也不能写完这些,我只能慢慢来,一起共勉吧。冲了!(主要是太菜了,不系统学习下,怕是铜牌都拿不到呀!) 算法竞赛入门到进阶一、sort函数自定义排序二、c++容器的使用1.vector动态数组2.stack栈3.queue队列4.list链表5.set集合6.map映射三、二进制子集生成四、bfs.

qq_43514659的博客 2万+

java数组的定义(菜鸟教程)

数组 数组有两种定义形式。 数组的定义: 这一种形式使用的频率高,推荐使用。 int[] ints={1,2,3}; 第二种形式(容易使人混淆因为在开发中可能把这个看成一个数组类型而不是变量名) int ints[]={1,2,3}; 数组的初始化方式:(静态初始化和动态初始化的区别在于静态初始化:由程序员自己为数组对象的每个元素赋值,由系统自动计算出数组的长度) 动态初始化:指由程序员自己指定数组对象的长度,由系统先自动为其赋值。程序中程序员可以为元素重新赋值; 第一种:注意:这种形式只能在定

m0_49151953的博客 2154

EPSON RX8010SJ RTC实战:I2C寄存器配置避坑指南(附完整初始化代码)

本文详细解析了EPSON RX8010SJ RTC芯片在I2C寄存器配置中的常见问题与解决方案,包括TEST位、STOP位和中断控制等关键配置要点。通过实战经验分享和完整的初始化代码模板,帮助开发者避免常见陷阱,确保RTC模块的稳定运行。

weixin_28678831的博客 405

工作中SVN的使用,保姆级教程!

SVN是一款集中式版本控制系统,采用客户端-服务器模式管理代码版本。与Git相比,SVN在目录权限控制、大型二进制文件处理等方面具有优势,适合特定场景使用。本文介绍了SVN的安装方法、基本操作(检出、提交、更新、回滚等)以及分支管理(创建、合并、切换)。同时讲解了文件冲突的解决方法,并演示了如何在IDEA中集成SVN工具。SVN虽然逐渐被Git取代,但在某些特定场景下仍是可靠选择,工具选择应基于团队和项目需求。

胜人者有力,自胜者强! 1849

Java数组入门指南:从菜鸟到高手的快速通关手册(附实战案例)!!

举个栗子🌰:把数组想象成超市的储物柜,每个格子大小一样(数据类型相同),按顺序编号(索引从0开始)。(敲黑板)别看它平平无奇,当年有多少新手在数组这里栽跟头,又有多少面试官把数组问题当作必考题!准备好你的IDE,咱们直接上硬菜!这时候数组就像哆啦A梦的口袋一样从天而降!数组就像编程世界里的集装箱,掌握它你就拿到了打开数据存储大门的钥匙!今天咱们要聊的这个知识点,绝对是Java世界里最最最基础但又最最最重要的存在——数组初始化分静态和动态两种,新手必踩的坑都在这里了!Too young!

guoguo88999的博客 956

TensorRT-LLM环境配置避坑指南:从安装到实战

本文是一份详尽的TensorRT-LLM环境配置避坑指南。文章重点解析了从Python、CUDA、PyTorch版本选择,到解决mpi4py安装这一核心难题的完整流程,并提供了经过验证的稳定版本组合与实战排错方案,帮助开发者高效部署大语言模型推理优化环境。

a0b1c2d3的专栏 983

Java创建数组的四种方式

/创建了一个类型为int,名字为nums的数组,初始值为1,2,3,4...//创建了一个类型为int,名字为nums ,长度为5的数组。语法 : 数据元素类型 [] 数组名称 = new 数据元素类型 [] { 数据1,数据2,数据3..... };语法: 数据元素类型 [] 数组名称 = { 数据1,数据2,数据3..... };语法: 数组元素类型 [] 数组名称 = new 数组元素类型 [数组长度]

fanfangyu的博客 5951

实现高精度卷积混响--MATLAB仿真篇

一、前言 之前在STM32F407上现实了直播声卡,实现的经典Schroeder混响模型和Moorer混响模型,得到不错效果。后来得知卷积混响最为真实地表现空间的特性,所以也就尝试在MCU上实现一个高精度的卷积混响(卷积点数为32768),目前MCU出来的混响效果算得上一流水准,本人也在计划在ADI的21489或者SC584上更高精度的卷积混响。 二、卷积方式 1、conv1是使用MATLAB自带卷积函数conv 2、conv2和conv3是改进后卷积过程,具有减少运算量特点,方便嵌入式移植 clear;

Six44的博客 5073

基于GA-PSO-BP混合神经网络的多输入多输出数据预测-Python代码实现

多输入多输出数据预测

2301_80449389的博客 2783

菜鸟教程学习JAVA 01

基础语法 编写Java程序时,应注意以下几点: 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello和hello是不同的。 类名:对于所有的类来说,类名的首字母应该大写。如果类名有多个单词组成,应该采用驼峰命名。 方法名:所有的方法名都应该以小写字母开头。如果方法名含有对个单词,后面的单词首字母大写。 源文件名:源文件名必须和类名相同。当保存文件的时候,应该使用类名作为文件名保存。 主...

weixin_42512266的博客 224

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

一文学透Java数组:从菜鸟到操作大师(避坑指南)

咱们程序员就像现实中的整理师,而数组就是咱们最趁手的收纳工具!(信我)刚入门时总有人觉得数组简单,结果写着写着就报NullPointerException,或者遇到数组越界直接崩掉…今天我就把数组的十八般武艺拆开了揉碎了讲,保准你看完再也不怕操作数组!(个人心得)数组就像编程世界的乐高积木,看似简单却能搭出万千变化。那就像用吸管喝珍珠奶茶——珍珠根本吸不上来!这就像电梯按钮没有4楼直接到5楼——你按4楼肯定没反应!数组变量声明后必须初始化才能使用,这就像买了手机不插SIM卡——根本打不了电话!

binbinaijishu88的博客 715

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java Stream全攻略:从菜鸟到大神的进化之路

/ 实现字符串拼接收集器。

Wiz1414的博客 1563

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

springboot菜鸟教程,一线互联网架构师筑基必备技能之Java篇

由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,

m0_60575487的博客 503

java学习路线

Java 学习路线 Java 学习路线一条龙版 by 程序员鱼皮 ???? + ???? = ???????? 建议先观看视频导读:https://www.bilibili.com/video/BV1Qf4y1K7ff/ 大纲 路线特点 最新,完整一条龙的大厂 Java 学习路线,从入门到入土 同时适用于想全面学习 / 快速求职的同学,可以根据符号来定制自己的专属学习路线 给出目标、学习建议、关键知识点、最优资源以及各类资源推荐(视频、书籍、文档、项目、工具等) 鱼皮自己是 Java 开发者,融入个

w18377940962的博客 9733

java成长之路必备学习网站

java成长之路必备学习网站 这是个人在学习过程中觉得非常不错的几个网站,对自己的IT生涯规划,以及方向阅历都提供了非常强有力的帮助,其中最关键还是对技能的提升,望各位猿友们多多指点和提议: 1.w3cschool W3Cschool在线教程 2.B站 哔哩哔哩 在线很多学习视频,内容安排也比较合理,适合大众学者 Stackoverflow.com可能是编程世界中最受欢迎的网站。 有数百...

qq_36760873的博客 400

【Java】Java 学习路线一条龙版

⭐ 牛客 Java 面试宝典:https://www.nowcoder.com/tutorial/94阿里 Java 技术图谱:https://developer.aliyun.com/graph/java觉得看文字累的朋友,欢迎看下视频版,带大家导读一下:https://www.bilibili.com/video/BV1Qf4y1K7ff/以上就是鱼皮熬了几天大夜、结合个人经验、并且参考了大量网上的文章和评论总结而成的学习路线,真的是非常不容易,如果大家觉得满意请务必三连支持下。

Bankcary的博客 6327

Java程序员必备:收藏这份大模型学习指南,轻松实现薪资翻倍与职业跃迁!

AI时代的技术迭代速度,远比我们想象的更快。很多Java同学总想“等我把Python学完、把数学补完、把所有理论都吃透再开始实战”,但等到准备“完美”时,早就错过了行业机遇。Java程序员转大模型,优势远大于挑战——你不用从零搭建编程基础,不用重新理解工程化逻辑,只需补全AI相关的“知识模块”,再通过项目把Java技术和大模型能力结合起来,就能快速实现转型。

maomaoaihkl的博客 367

java常用类,常用包,常用接口,运行时错误(面试必备)

原文地址:菜鸟社区 java常用类,常用包,常用接口,运行时错误 了解java的常用类,常用包,常用接口,运行时错误是入门java基础的最基本的东西,也是以后天天见到的.语言只是一个工具, 熟悉这个工具才能让你熟练的干活---一个菜鸟的感悟. 常用类:java.lang.Object、java.lang.String、java.lang.StringBuffer、java.

linekeys的专栏 1991

java学习进阶之路,如果从一个菜鸟进阶成大神

诞生不过二十余年的Java语言凭借其跨平台、面向对象、适合于分布式计算的特性,广泛应用于Web网站、移动设备、桌面应用中,并且已经连续多年稳居TOBIE编程语言排行榜前列,最近更是登上冠军宝座。File及相关类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应缓冲流和管道流,字节和字符的转化流,包装流,以及常用包装类使用。图的深度优先搜索、图的广度优先搜索、拓扑排序、Dijkstra算法(单源最短路径)、霍夫曼编码、辗转相除法、最小生成树等。

wenlonglanying的博客 346

Java菜鸟面试突破系列之java虚拟机

Java菜鸟面试突破系列之java虚拟机前言:JDK是java开发的必备工具箱,JDK其中有一部分是JRE,JRE是JAVA运行环境,JVM则是JRE最核心的部分。换言之,JVM是java的核心,是java可以一次编译到处运行的本质所在,使用最广泛的java虚拟机是最广泛的oracle的HotSpot JVM。Java HotSpot Client VM和Java HotSpot Server VM

技术心路 1047
上一篇: Java数组完全指南:从菜鸟到高手的必备手册
下一篇: [Python]手把手教你搞定PyTorch环境搭建(2023新版)
pythonxiaowang8
博客等级 码龄2年 100粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值