Java SE 零基础入门Day03 数组核心详解(定义+内存+遍历+算法+实战案例)

本文涵盖数组基础语法、内存原理、遍历最值、二分查找、数组反转、评委打分实战,附大厂面试思路+IDEA技巧+职场心得,Java新手必看!

摘要

本篇为Java SE入门第三天核心笔记,聚焦数组这一核心数据结构,从基础定义、两种初始化方式,到内存原理、遍历最值操作,再到大厂高频面试算法(二分查找、数组反转)和实战评委打分案例,全程保姆级讲解,同时包含IDEA实用配置、职场软技能干货,适合零基础小白快速掌握数组核心知识。

一、前置干货:工具配置 + 职场成长指南

1. 学习理念

打牢基础,菜就多练!Java学习无捷径,反复敲代码、理解原理是核心;包的作用:用来管理Java类,避免类名冲突,企业开发必备。

2. IDEA 实用配置(护眼+开发效率)

  1. 主题配色:白天使用浅蓝色主题,晚上使用黑色主题,保护视力;
  2. 黄色警告线:IDEA中代码下方的黄线 = 警告⚠️,不影响代码运行,但建议优化规范;
  3. 快速生成变量、自动补全,提升编码速度。

3. 职场软技能(必看!)

  1. 情商+表达力:学会主动沟通、提供情绪价值,职场中圆滑处事更容易获得机会;
  2. 面试心态:不要害怕失败,通常需要经历20-30场面试才能拿到满意offer;
  3. 坚持就是胜利:只要持续努力,一定能在行业内拥有一席之地。

二、数组核心基础

1. 数组定义

数组是用来存储同种数据类型 的多个元素的容器,数组一旦创建,长度不可改变

2. 数组定义格式

java 复制代码
// 标准格式(推荐)
数据类型[] 数组名;  

// 举例:存储int类型的数组
int[] array;

✅ 语法规范:方法带括号(),属性不带括号!


三、数组的两种初始化方式(核心)

初始化:为数组分配内存空间,并赋值。

1. 动态初始化

  • 定义时只指定长度,由系统默认赋值;
  • 适用场景:不确定元素具体值,只确定长度。
java 复制代码
// 格式:数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[6]; // 长度为6的int数组,默认值:0

2. 静态初始化

  • 定义时直接指定元素值,系统自动计算长度;
  • 适用场景:已知所有元素值。
java 复制代码
// 标准格式
int[] arr = new int[]{5,13,19,21};

// 简化格式(最常用)
int[] arr = {5,13,19,21,37};

四、数组核心操作

1. 数组遍历

依次访问数组中的每一个元素,明确循环次数,优先使用for循环

java 复制代码
int[] arr = {10,20,30,40};
// 数组长度:数组名.length
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]); // 打印每个元素
}

2. 数组获取最值(最大值/最小值)

java 复制代码
int[] arr = {12,56,3,78,23};
int max = arr[0]; // 假设第一个元素为最大值
int min = arr[0]; // 假设第一个元素为最小值

for (int i = 1; i < arr.length; i++) {
    if(arr[i] > max) max = arr[i];
    if(arr[i] < min) min = arr[i];
}
System.out.println("最大值:"+max);
System.out.println("最小值:"+min);

五、大厂面试算法:二分查找

1. 核心前提

数组必须有序 + 元素不重复,效率远高于普通查找!

2. 实现思路

  1. 定义查找范围:起始索引start=0,结束索引end=数组长度-1
  2. 计算中间索引mid
  3. 比较中间值和目标值:
    • 相等 → 找到,返回索引;
    • 中间值大 → 目标在左侧,修改end=mid-1
    • 中间值小 → 目标在右侧,修改start=mid+1
  4. 循环结束未找到 → 元素不存在。

3. 完整代码

java 复制代码
package com.yangque;

public class BinarySearchDemo {
    public static void main(String[] args) {
        // 二分查找的前提:数组必须 有序!
        int[] arr = {5,13,19,21,37,56,64,75,80,88,92};
        
        int start = 0;          // 查找范围起点
        int end = arr.length-1; // 查找范围终点
        int value = 15;        // 要查找的目标值

        // 不明确循环次数 → 使用while循环
        while (start <= end) {
            // 计算中间位置
            int mid = (start + end) / 2;

            // 找到目标值
            if(arr[mid] == value) {
                System.out.println(value + "找到了,下标为:" + mid);
                return; 
            }
            // 目标值在左侧
            else if (arr[mid] > value) {
                end = mid - 1;
            }
            // 目标值在右侧
            else {
                start = mid + 1;
            }
        }
        // 循环结束 → 未找到
        System.out.println("没有找到数字:" + value);
    }
}

4. 大厂面试回答思路

如果写不出完整代码,口述思路即可

二分查找需要有序数组,我会定义首尾索引,不断取中间值比较,缩小查找范围,直到找到元素或范围失效,这种方式时间复杂度更低,效率更高。


六、大厂面试算法:数组反转

1. 核心思路(最简单,面试必背)

  • 双指针法:开头一个指针,结尾一个指针;
  • 交换两个指针指向的元素;
  • 指针向中间移动,直到相遇。

2. 简化理解

交换:第1个 ↔ 最后1个,第2个 ↔ 倒数第2个,以此类推。


七、数组实战案例:评委打分

1. 需求

6个评委打分(0-100),去掉一个最高分、一个最低分,计算剩余4个分数的平均值。

2. 解题思路

  1. 定义长度为6的数组,存储评委分数;
  2. 键盘录入6个分数;
  3. 遍历数组求总和、最大值、最小值;
  4. 平均分 = (总和 - 最大值 - 最小值) / 4;
  5. 输出结果。

3. 完整代码

java 复制代码
package com.yangque;

import java.util.Scanner;

public class ScoreDemo {
    public static void main(String[] args) {
        // 1. 动态初始化数组,长度6
        int[] scores = new int[6];
        Scanner sc = new Scanner(System.in);

        // 2. 循环录入6个分数
        for (int i = 0; i < scores.length; i++) {
            System.out.println("请输入第"+(i+1)+"个评委分数:");
            scores[i] = sc.nextInt();
        }

        // 3. 求总和、最大值、最小值
        int sum = 0;
        int max = scores[0];
        int min = scores[0];

        for (int i = 0; i < scores.length; i++) {
            sum += scores[i];
            if(scores[i] > max) max = scores[i];
            if(scores[i] < min) min = scores[i];
        }

        // 4. 计算平均分
        int avg = (sum - max - min) / 4;
        System.out.println("选手最终得分:" + avg);
    }
}

八、数组内存原理(新手必懂)

  1. Java内存分为栈、堆等区域;
  2. 数组名存储在栈内存,保存数组的地址值;
  3. 数组元素存储在堆内存,数组通过地址值找到元素;
  4. 数组初始化时,堆内存会自动分配默认值(int→0,String→null)。

    重点:方法区存字节码文件,方法栈存方法和变量,堆内存存new出来的对象

九、数组常见问题 + 异常机制

1. 数组操作常见问题

  • 索引越界异常:访问了数组不存在的索引(索引 ≥ 数组长度);
  • 空指针异常:数组名赋值为null,无法访问元素。

2. 异常机制

代码出现异常 → JVM会直接终止当前进程 → 后续代码不再执行


十、循环补充:for 和 while 选择规则

  1. 明确循环次数 → 优先使用 for循环(数组遍历、固定次数执行);
  2. 不明确循环次数 → 优先使用 while循环(二分查找、死循环)。

十一、Day03 核心总结

  1. 数组:存储同种数据类型,长度固定,分动态/静态初始化;
  2. 核心操作:遍历(for)、求最值、索引访问;
  3. 高频算法:二分查找(有序数组)、数组反转(双指针);
  4. 实战案例:评委打分(综合练习数组+键盘录入+循环);
  5. 内存:数组名存栈,元素存堆;异常会终止程序运行;
  6. 规范:包管理类,IDEA配置护眼,基础不牢地动山摇!
相关推荐
Byron__2 小时前
AI学习_03_LangChain_RAG基础概念
人工智能·学习·langchain
科技AI训练师2 小时前
2026工业风机行业观察:英飞风机在中高端通风排烟领域表现
大数据·人工智能
甘露寺2 小时前
深入理解并发模型:从 Python 的 async/await 到 Java 的虚拟线程与线程池机制
java·开发语言·网络
月诸清酒2 小时前
39-260422 AI 科技日报 (OpenAI 发布 GPT-Image-2:视觉理解力登顶)
人工智能·gpt
郝学胜-神的一滴2 小时前
深入理解 epoll_wait:高性能 IO 多路复用核心解密
linux·服务器·开发语言·c++·网络协议
Yu_Lijing2 小时前
Python数据分析和数据处理库Pandas(数据组合函数)
人工智能·数据挖掘·数据分析·pandas
繁星星繁2 小时前
【AI】Langchain(一)
人工智能·langchain
中科天工2 小时前
中科天工智能包装技术是什么?
大数据·人工智能
HAWK eoni2 小时前
java进阶1——JVM
java·开发语言·jvm