讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

剧云
剧云

中文短剧剧本制作平台

Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

Java 数组终极指南:从零到英雄(带点幽默)

秋枫同学_7137

秋枫同学_7137

发布时间:2024-11-16 14:20:24

|

421人浏览过

|

来源于dev.to

转载

java 数组终极指南:从零到英雄(带点幽默)

“没有数组的编程就像没有碗的烹饪一样 - 当然,你可以做到,但你为什么要这么做呢?”*
无论您是刚刚进入 java 世界,还是一位经验丰富的程序员,正在温习基础知识,深入了解数组都可以改变游戏规则。数组是您将遇到的最基本但最强大的数据结构之一。让我们一步步分解数组的每一个细节。

什么是数组?

数组就像 java 的午餐盒。您将一组项目(数据)打包到一个容器(数组)中,瞧!您可以随身携带它,只需查找其位置即可访问任何项目,并根据需要执行操作。数组的美妙之处在于它们的简单性和高效组织数据的能力。

数组的用途

数组存储相同类型元素的固定大小、顺序集合。这意味着如果您需要处理整数、字符串甚至对象的列表,数组可以完成繁重的工作。以下是一些目的:

  • 高效数据访问:使用索引快速访问。

  • 内存管理:数组分配在连续的内存块中,这意味着数据局部性以获得更好的性能。

    立即学习“Java免费学习笔记(深入)”;

  • 简单性:将相关数据分组在单个变量名称下。

数组的内存表示

java 中的数组存储在 连续内存 中。这就是有趣的地方:

  1. 连续内存块:大小为 n 的数组存储在可容纳 n 个连续数据元素的内存块中。数组中的每个元素都放置在特定的索引处。对于数组 arr:
    • arr[0] 位于基地址。
  • arr[1] 位于 base_address + size_of_element。

  • 等等。

  1. 索引:数组是零索引的。这意味着使用索引 0 访问第一个元素,使用索引 1 访问第二个元素,依此类推

java 数组声明剖析

要在 java 中声明数组,请遵循以下基本语法:

// declaring and initializing an array of integers
int[] myarray = new int[5]; // array of size 5, initialized with default values (0s).

// shortcut with initialization
int[] myarray = {1, 2, 3, 4, 5};

// multidimensional array declaration
int[][] matrix = new int[3][4]; // a 3x4 matrix.

数组的类型

  1. 单维数组:就像一条直线数据。
string[] names = {"alice", "bob", "charlie"};
  1. 多维数组:将它们视为表格(2d)或更高维的网格(3d 等)。
int[][] table = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
  1. 锯齿状数组:每个子数组可以有不同长度的数组。
int[][] jaggedarray = {
    {1, 2},
    {3, 4, 5},
    {6}
};

数组初始化技术

  • 静态初始化 :在创建时直接赋值。
int[] numbers = {10, 20, 30, 40};
  • 动态初始化:创建后可以赋值。
int[] numbers = new int[4];
numbers[0] = 10;
numbers[1] = 20;

数组方法和技巧

java 的 java.util.arrays 类就像数组的瑞士军刀:

Windows 图片打印
Windows 图片打印

通过 Python 使用 mspaint /pt 在 Windows 上打印图像——绕过 bash 中文路径编码问题。

下载
  • 排序:
int[] arr = {5, 3, 8, 1};
arrays.sort(arr); // arr is now [1, 3, 5, 8]
  • 二分查找:
int index = arrays.binarysearch(arr, 3); // finds the index of 3.
  • 填充数组:
arrays.fill(arr, 10); // sets all elements to 10.
  • 比较数组:
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
boolean areequal = arrays.equals(arr1, arr2); // true

数组算法

  • 反转数组:
for (int i = 0; i < arr.length / 2; i++) {
    int temp = arr[i];
    arr[i] = arr[arr.length - 1 - i];
    arr[arr.length - 1 - i] = temp;
}
  • 找到最大/最小元素:
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
    if (arr[i] > max) {
        max = arr[i];
    }
}
  • 旋转数组: 旋转数组意味着将其元素向左或向右移动。
void rotateright(int[] arr, int steps) {
    int length = arr.length;
    steps = steps % length; // in case steps > length
    int[] temp = new int[steps];
    system.arraycopy(arr, length - steps, temp, 0, steps);
    system.arraycopy(arr, 0, arr, steps, length - steps);
    system.arraycopy(temp, 0, arr, 0, steps);
}

常见的数组模式

  1. 滑动窗口技术:用于涉及连续子数组的问题。
int maxsum = 0;
int windowsum = 0;
int k = 3; // size of the window
for (int i = 0; i < k; i++) {
    windowsum += arr[i];
}
maxsum = windowsum;
for (int i = k; i < arr.length; i++) {
    windowsum += arr[i] - arr[i - k];
    maxsum = math.max(maxsum, windowsum);
}
  1. 双指针技术:非常适合检查总和达到目标的对等问题。
Arrays.sort(arr); // Required for this approach
int left = 0, right = arr.length - 1;
while (left < right) {
    int sum = arr[left] + arr[right];
    if (sum == target) {
        // Found the pair
    } else if (sum < target) {
        left++;
    } else {
        right--;
    }
}

使用数组解决问题的技巧

  • 识别问题类型:是搜索、排序、子数组操作还是分区?

  • 使用就地算法节省空间。

  • 通过最小化冗余操作来优化循环。

高级主题:多维数组和内存洞察

java中的数组存储在堆内存中。多维数组是数组的数组,因此访问像 arr[i][j] 这样的元素需要取消引用两次:

  • arr 指向引用数组。

  • 每个 arr[i] 本身就是对另一个数组的引用。

何时使用数组

  • 当数据是固定大小时:你提前知道需要多少个元素。

  • 当快速访问至关重要时:数组为基于索引的访问提供 o(1) 时间复杂度。

结论

数组是 java 编程工具库中的基本工具。无论您是要反转数组、对它们进行排序还是在复杂的算法中使用它们,了解它们的细微差别都将使您成为更好的开发人员。请记住,数组看似简单,但掌握其全部潜力可以为复杂问题提供优雅的解决方案。


关于 java 数组的综合指南到此结束。现在,继续使用数组来克服下一个编码挑战。请记住,数组的大小可能是固定的,但您对它们的了解应该不断增长!

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1938

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

3184

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6384

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

6549

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

8074

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

12534

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

6499

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

7307

2025.08.07

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Conan 2 安装指南
Conan 2 安装指南

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn