」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Java 陣列簡介

Java 陣列簡介

發佈於2024-11-07
瀏覽:961

Introduction to Arrays in Java

编程通常涉及管理和操作大量数据,对此高效且有效的数据结构至关重要。数组是计算机科学中的基本数据结构,提供了一种存储固定大小的相同类型元素序列的方法。在本博客中,我们将深入了解 Java 中的数组:了解它们是什么、它们的语法、如何对它们进行操作以及它们的内存管理。

为什么我们需要数组?

在Java中使用变量时,您可以单独声明和初始化每个变量,例如:

java
int a = 19;
String name = "John Doe";

但是,如果您需要处理同一类型的多个值,这种方法就会变得低效。例如,如果您要存储多个卷号或名称,则对每个值进行硬编码是不切实际的。数组可以让您有效地存储值的集合,从而派上用场。例如,如果您需要存储五个卷号,则可以使用数组。

什么是数组?

数组本质上是相同类型的数据项的集合。数组可以存储基本数据类型,如整数、浮点数和字符,以及对象。例如:

int[] rollNumbers = new int[5];
String[] names = {"Alice", "Bob", "Charlie"};

数组的语法

Java 中声明数组的语法很简单:

dataType[] arrayName = new dataType[size];

例如,创建一个包含五个整数的数组:

int[] rollNumbers = new int[5];

或者,您可以在一行中声明和初始化数组:

int[] rollNumbers = {23, 55, 9, 18, 45};

数组的特点

均质元素

在数组中,所有元素必须属于同一类型。您不能在单个数组中混合类型;例如:

int[] nums = {1, 2, "three"}; // Will cause a compile-time error

固定尺寸

数组一旦创建,它的大小就固定了。您无法扩大或缩小其大小。此约束通常会导致选择其他数据结构,例如 ArrayList,以满足更动态的数据需求。

内存管理

Java中的数组包括:

  • 堆栈内存:存储数组的引用变量。
  • 堆内存:存储实际的数组对象及其元素。

声明数组时,引用在栈内存中创建,数组对象存储在堆内存中。

内存分配

数组的内存分配有两个关键阶段:

  1. 声明:创建了引用变量,但它没有指向任何地方。
  2. 初始化:引用变量指向堆中实际的数组对象,其中包含元素。

例如:

int[] rollNumbers; // Declaration
rollNumbers = new int[5]; // Initialization

动态内存分配

Java执行动态内存分配,意味着在运行时,它根据需要分配内存,从而使其内存管理变得高效。

数组中的输入和输出

接受输入

要使用用户输入填充数组,您可以使用循环和扫描仪来从控制台读取输入。

Scanner scanner = new Scanner(System.in);
int[] arr = new int[5];
for (int i = 0; i 



打印阵列

您可以使用循环或 Arrays.toString() 实用方法打印数组以获得更易读的输出。

for (int i = 0; i 



或者

System.out.println(Arrays.toString(arr));

多维数组

二维数组或矩阵是数组的数组。二维数组的语法如下所示:

int[][] matrix = new int[3][3];

例子

int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

为了将元素动态输入到二维数组中,使用嵌套循环。

ArrayList:动态替代方案

Java 中的数组大小固定,当编译时元素数量未知时,会导致效率低下。通过使用 ArrayList 类(Java Collections Framework 的一部分)可以克服此限制。

使用数组列表

ArrayList 类提供动态调整大小。创建 ArrayList 的语法如下:

ArrayList numbers = new ArrayList();

您可以动态添加和操作元素:

numbers.add(1);
numbers.add(2);
numbers.add(3);
System.out.println(numbers); // Output: [1, 2, 3]

numbers.set(1, 10); // Change element at index 1
System.out.println(numbers); // Output: [1, 10, 3]

numbers.remove(0); // Remove element at index 0
System.out.println(numbers); // Output: [10, 3]

boolean contains = numbers.contains(10); // Check if the list contains 10
System.out.println(contains); // Output: true

ArrayList 的内部工作原理

在内部,ArrayList 使用具有初始固定容量的动态数组。当此容量耗尽时,将创建一个容量更大的新数组,并复制现有元素。这个过程确保ArrayList可以随着元素的添加而动态增长。

常见的数组操作

寻找最大元素

要查找数组中的最大元素,请迭代数组并跟踪最高值:

int max = arr[0];
for (int i = 1; i  max) {
        max = arr[i];
    }
}
System.out.println("Maximum value: "   max);

反转数组

要反转数组,请使用两指针技术:

public static void reverse(int[] arr) {
    int start = 0;
    int end = arr.length - 1;
    while (start 



调用反向函数:

int[] arr = {1, 2, 3, 4, 5};
reverse(arr);
System.out.println(Arrays.toString(arr)); // Output: [5, 4, 3, 2, 1]

结论

数组是 Java 中的关键数据结构,可以有效地存储和操作数据集。虽然大小固定,但数组在处理同类数据类型时功能强大且用途广泛。对于动态数据需求,ArrayList 提供了额外的灵活性,允许任意增长大小。了解这些结构及其操作为更高级的编程和数据管理奠定了基础。此外,练习数组操作并了解其底层内存管理有助于编写更高效和优化的代码。

版本聲明 本文轉載於:https://dev.to/bhaweshchaudhary/introduction-to-arrays-in-java-17gg?1如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • 如何覆蓋 PHP 的 `mail()` 函數中的信封回傳地址?
    如何覆蓋 PHP 的 `mail()` 函數中的信封回傳地址?
    如何在PHP Mail 中覆蓋信封回傳地址為了解決使用PHP 的mail() 函數設定信封回傳地址的問題,這個答案提供了一個簡單的解決方案。 mail() 函數接受可選的第四個和第五個參數。雖然第四個參數用於設定標頭,但第五個參數可用於將選項直接傳遞給底層的 sendmail 命令。透過在第五個參數...
    程式設計 發佈於2024-11-07
  • 科技觀察 #1
    科技觀察 #1
    大家好,這是我上週的技術手錶,其中包含很多 #react、一點 #html、一些 #css 和 #npm。 ? https://www.totaltypescript.com/how-to-create-an-npm-package 如何建立 NPM 套件 建立、測試和發布 NPM 套件(從初始化...
    程式設計 發佈於2024-11-07
  • mysqli_fetch_array() 何時顯示錯誤「期望參數 1 為 mysqli_result,給定布林值」?
    mysqli_fetch_array() 何時顯示錯誤「期望參數 1 為 mysqli_result,給定布林值」?
    mysqli_fetch_array() 期望MySQLi 結果,而不是布林值在給定的PHP 程式碼中,錯誤「mysqli_fetch_array() 期望參數1 為mysqli_result, boolean Give" 表示使用mysqli_query() 的查詢執行失敗,傳回fals...
    程式設計 發佈於2024-11-07
  • 子集和問題的 PHP 程式
    子集和問題的 PHP 程式
    子集和問題是電腦科學和動態規劃中的經典問題。給定一組正整數和一個目標和,任務是確定是否存在給定集合的子集,其元素總和等於目標和。 子集與問題的PHP程序 使用遞歸解決方案 例子 <?php // A recursive solution for the subset sum problem /...
    程式設計 發佈於2024-11-07
  • JavaScript 陣列方法:綜合指南
    JavaScript 陣列方法:綜合指南
    数组是 JavaScript 中最基本的数据结构之一。使用数组,您可以在单个变量中存储多个值。 JavaScript 提供了许多内置方法来操作数组,使它们具有令人难以置信的通用性。在这篇文章中,我们将探讨所有内置数组方法以及如何在 JavaScript 项目中有效地使用它们。 核心方...
    程式設計 發佈於2024-11-07
  • 進階 T:依賴參數、推斷聯合以及 Twitter 上的健康互動。
    進階 T:依賴參數、推斷聯合以及 Twitter 上的健康互動。
    每次我用 TypeScript 写成 Foo 时,我都会感受到失败的沉重。 在一种情况下,这种感觉特别强烈:当函数采用的参数取决于哪个 "mode" 处于活动状态时。 通过一些示例代码更清晰: type Provider = "PROVIDER A" | "PR...
    程式設計 發佈於2024-11-07
  • 如何建立人力資源管理解決方案
    如何建立人力資源管理解決方案
    1. Understanding the Basics of Frappe and ERPNext Task 1: Install Frappe and ERPNext Goal: Get a local or cloud-based instance of ERP...
    程式設計 發佈於2024-11-07
  • 從週五黑客到發布:對創建和發布開源專案的思考
    從週五黑客到發布:對創建和發布開源專案的思考
    从周五补丁破解到发布:对创建和发布开源项目的思考 这是针对初学者和中级开发人员的系列的一部分,通过将他们的想法作为开源项目发布或引起兴趣。 这些想法是有偏见的和个人的。计划发布更多文章。通过分享一些思考,我希望能启发你做自己的项目 思考(此) 作为 Java 开发人员学习 Go l...
    程式設計 發佈於2024-11-07
  • 可以使用 constexpr 在編譯時確定字串長度嗎?
    可以使用 constexpr 在編譯時確定字串長度嗎?
    常數表達式最佳化:可以在編譯時確定字串長度嗎? 在最佳化程式碼的過程中,開發人員嘗試計算使用遞​​歸函數在編譯時計算字串文字的長度。此函數逐字元計算字串並傳回長度。 初步觀察:該函數似乎按預期工作,在運行時返回正確的長度並產生表明計算發生在編譯時的彙編程式碼。這就提出了一個問題:是否保證length...
    程式設計 發佈於2024-11-07
  • 在 Raspberry Pi 上執行 Discord 機器人
    在 Raspberry Pi 上執行 Discord 機器人
    Unsplash 上 Daniel Tafjord 的封面照片 我最近完成了一个软件工程训练营,开始研究 LeetCode 的简单问题,并觉得如果我每天都有解决问题的提醒,这将有助于让我负起责任。我决定使用按 24 小时计划运行的不和谐机器人(当然是在我值得信赖的树莓派上)来实现此操作,该机器人将执...
    程式設計 發佈於2024-11-07
  • 解鎖 JavaScript 的隱藏寶石:未充分利用的功能可提高程式碼品質和效能
    解鎖 JavaScript 的隱藏寶石:未充分利用的功能可提高程式碼品質和效能
    In the ever-evolving landscape of web development, JavaScript remains a cornerstone technology powering countless large-scale web applications. While...
    程式設計 發佈於2024-11-07
  • 為什麼透過非常量指標修改「const」變數看起來有效,但實際上並沒有改變它的值?
    為什麼透過非常量指標修改「const」變數看起來有效,但實際上並沒有改變它的值?
    透過非常量指標修改 const在 C 中,const 變數一旦初始化就無法修改。但是,在某些情況下,const 變數可能會被更改。考慮以下代碼:const int e = 2; int* w = (int*)&e; // (1) *w = 5; ...
    程式設計 發佈於2024-11-07
  • Android - 將 .aab 檔案上傳到 Play 商店時出錯
    Android - 將 .aab 檔案上傳到 Play 商店時出錯
    如果您遇到此錯誤,請按照以下步驟操作以確保與您的套件名稱和簽署金鑰保持一致: 確保 app.json 檔案中的套件名稱與您第一次上傳 .aab 檔案時所使用的套件名稱相符。 "android": { "permissions":["CAMERA","READ_EXTERNAL_STO...
    程式設計 發佈於2024-11-07
  • 如何使用 PHP 將 HTML 轉換為 PDF
    如何使用 PHP 將 HTML 轉換為 PDF
    (適用於 Windows 的指南。不適用於 Mac 或 Linux) (圖片來源) 在 PHP 中將 HTML 轉換為 PDF 的方法不只一種。您可以使用Dompdf或Mpdf;但是,這兩個庫的執行方式有所不同。 注意:本文中並未包含所有解決方案。 要使用這兩個函式庫,您將需要 Composer...
    程式設計 發佈於2024-11-07
  • C++ 會擁抱垃圾收集嗎?
    C++ 會擁抱垃圾收集嗎?
    C 中的垃圾收集:實現和共識的問題C 中的垃圾收集:實現和共識的問題雖然有人建議C 最終會包含垃圾收集器,但它仍然是爭論和持續發展的主題。要理解其中的原因,我們必須深入研究迄今為止阻礙其納入的挑戰和考慮因素。 實現複雜性在 C 中加入隱式垃圾收集是一個非-瑣碎的任務。該語言的低級性質和對指針的廣泛支...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3