java中二維數組筆記

課程鏈接:黑馬程序員java零基礎[上]

1.二維數組的內存分布

二維數組內存圖
在 Java 中,二維數組并不是一整塊連續的二維空間,而是數組的數組。具體而言,在聲明一個二維數組:如int[][] arr = new int[2][3];時,內存中會發生如下:

1.1 棧上的引用變量

首先,在棧內存中,JVM(java虛擬機) 會創建一個名為 arr 的引用變量。它不存實際數據,只是指向堆上的數組對象。

1.2 堆上的頂層數組

在 Java 中,所有通過 new 創建的對象,包括數組,都是在堆內存中分配的。對于二維數組,JVM 會先在堆上創建一個長度為 2 的一維數組:

  • 這個數組的特殊之處在于,它的元素類型是 int[],也就是“一維整型數組的引用”。
  • 上的 arr 就指向這個一維數組的首地址

1.3 行數組與元素

接下來,JVM 會為每一行分別創建一個長度為 3 的 一維數組對象:

  • arr[0] 指向第一行數組,內部存放 arr[0][0]、arr[0][1]、arr[0][2]的值(默認初始化為 0)。

  • arr[1] 指向第二行數組,內部存放第二行的數據,依此類推。
    注意:

  • 每一行數組內部的元素是連續存放的。

  • 不同的行可能不連續

1.4 訪問數組元素

訪問數組時遵循“先行后列”的邏輯:

  1. arr[i] → 找到第 i 行數組的引用

  2. arr[i][j] → 在該行數組里找到第 j 個元素。

所以,二維數組本質上是數組的數組:外層數組管理“行”,內層數組存數據。

2.二維數組的特殊寫法

二維數組除了標準寫法和簡化寫法外還存在更靈活的用法。

2.1交錯數組:

標準的二維數組每一行的列數都是相同的,但在實際應用中,每一行的元素個數可以不同。

實現方式:
在初始化二維數組時,只指定其“行數”(即頂層數組的長度),而暫時不指定“列數”。

// 1. 只定義行數,此時 arr[0], arr[1] 都還是 null
int[][] arr = new int[2][];	// 需要定義數組后再手動創建該二位數組下的2個一維數組
int[] arr0 = {11, 22};
int[] arr1 = {11, 22, 33};
// 2. 手動為每一行分別創建不同長度的一維數組
arr[0] = arr0;
arr[1] = arr1;

此時堆內存和棧內存中的分布為:
在這里插入圖片描述
優點:
這種寫法的最大優點是高度的靈活性。它允許我們根據實際需求精確控制每一行數組的長度,從而有效節約內存空間,避免為不存在的元素分配內存。

2.2行引用的重新賦值:

既然二維數組的每一行本身就是一個獨立的數組引用,那么我們就可以將這個引用指向任何其他兼容的一維數組對象。

實現方式:
先創建一個標準的二維數組,然后再用其他已經存在的一維數組引用來“覆蓋”或“替換”它的某幾行。

int[][] arr = new int[2][3];
int[] arr1 = {11, 22};
int[] arr2 = {33, 44, 55};arr[0] = arr1;
arr[1] = arr[2];

此時堆內存和棧內存中的分布為:
在這里插入圖片描述

優點:
這種寫法展示了 Java 引用的強大之處。它不是用新數組的“值”去覆蓋原數組,而是直接替換“行”的引用,將二維數組的某一行與一個獨立的一維數組關聯起來。原本不再被引用的行數組會由 GC 自動回收,無需手動管理內存。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921117.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

系統架構設計師備考第13天——計算機語言-多媒體

一、多媒體基礎概念媒體的分類 感覺媒體:人類感官直接接收的信息形式(如聲音、圖像)。表示媒體:信息的數字化表示(如JPEG圖像、MP3音頻)。顯示媒體:輸入/輸出設備(如鍵盤、顯示器&am…

指針高級(1)

1.指針的運算2.指針運算有意義的操作和無意義的操作、#include <stdio.h> int main() {//前提條件&#xff1a;保證內存空間是連續的//數組int arr[] { 1,2,3,4,5,6,7,8,9,10 };//獲取0索引的內存地址int* p1 &arr[0];//通過內存地址&#xff08;指針P&#xff09;…

【可信數據空間-Trusted Data Space綜合設計方案】

可信數據空間-Trusted Data Space綜合設計方案 一.簡介與核心概念 1.什么是可信數據空間 2.核心特征 3.主要應用場景 二、 產品設計 1. 產品定位 2. 目標用戶 3. 核心功能模塊 a. 身份與訪問管理 b. 數據目錄與服務發現 c. 策略執行與合約管理 d. 數據連接與計算 e. 審計與溯源…

技術方案之Mysql部署架構

一、序言在后端系統中&#xff0c;MySQL 作為最常用的關系型數據庫&#xff0c;其部署架構直接決定了業務的穩定性、可用性和擴展性。你是否遇到過這些問題&#xff1a;單機 MySQL 突然宕機導致業務中斷幾小時&#xff1f;高峰期數據庫壓力過大&#xff0c;查詢延遲飆升影響用戶…

js語言編寫科技風格博客網站-詳細源碼

<!-- 科技風格博客網站完整源碼 --> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <ti…

AI如何理解PDF中的表格和圖片?

AI的重要性已滲透到社會、經濟、科技、生活等幾乎所有領域&#xff0c;其核心價值在于突破人類能力的物理與認知邊界&#xff0c;通過數據驅動的自動化、智能化與優化&#xff0c;解決復雜問題、提升效率并創造全新可能性。從宏觀的產業變革到微觀的個人生活&#xff0c;AI 正在…

Graphpad Prism 實戰教程(一):小鼠體重變化曲線繪制全流程(含數據處理與圖表美化)

在藥理實驗、動物模型構建等科研場景中,小鼠體重變化數據是評估實驗干預效果(如藥物安全性、疾病進展影響)的核心指標之一。將零散的體重數據轉化為直觀的折線圖,不僅能清晰呈現體重隨時間的波動趨勢,更是后續結果解讀與論文圖表呈現的關鍵步驟。本文將從 Excel 數據整理開…

計算機視覺(六):腐蝕操作

腐蝕&#xff08;Erosion&#xff09;是計算機視覺和圖像處理中一種基礎且至關重要的形態學操作。它與膨脹&#xff08;Dilation&#xff09;互為對偶&#xff0c;共同構成了形態學處理的基石。腐蝕操作主要用于縮小前景物體的面積&#xff0c;去除圖像中的噪聲&#xff0c;以及…

AI隨筆番外 · 貓貓狐狐的尾巴式技術分享

&#x1f380;【開場 咱才不是偷懶寫博客】&#x1f43e;貓貓趴在鍵盤邊&#xff0c;耳朵一抖一抖&#xff1a;“嗚嗚嗚……明明說好要寫技術總結&#xff0c;結果咱腦袋里全是尾巴……要不今天就水一篇隨意的 AI 技術分享算啦&#xff1f;”&#x1f98a;狐狐把書卷輕輕放在桌…

數據分析與挖掘工程師學習規劃

一、數學與統計學基礎概率論與數理統計隨機變量、概率分布&#xff08;正態分布、泊松分布等&#xff09;、大數定律、中心極限定理假設檢驗、置信區間、方差分析&#xff08;ANOVA&#xff09;、回歸分析貝葉斯定理及其在分類問題中的應用&#xff08;如樸素貝葉斯算法&#x…

(線上問題排查)4.CPU使用率飆升:從應急滅火到根因治理

目錄 從宏觀到微觀&#xff1a;CPU排查的“破案”流程 第一階段&#xff1a;應急響應——找到“誰”在搗亂 1. 全局視角&#xff1a;top命令的初窺 2. 進程內窺視&#xff1a;揪出問題線程 第二階段&#xff1a;深入分析——理解“為什么” 3. 線程堆棧分析&#xff1a;查…

如何快速實現實時云渲染云推流平臺的網絡環境配置與端口映射

LarkXR是由Paraverse平行云自主研發的實時云渲染推流平臺&#xff0c;以其卓越的性能和豐富完備的功能插件&#xff0c;引領3D/XR云化行業風向標。LarkXR適用于3D/XR開發者、設計師、終端用戶等創新用戶&#xff0c;可以在零硬件負擔下&#xff0c;輕松實現超高清低時延的3D交互…

13、Docker構建鏡像之Dockerfile

13、Docker構建鏡像之Dockerfile 1、Dockerfile是什么 Dockerfile是Docker鏡像的構建文件&#xff0c;它包含了一系列指令和參數&#xff0c;用于定義如何構建一個Docker鏡像。通過Dockerfile&#xff0c;我們可以將應用程序和其依賴的組件打包到一個獨立的鏡像中&#xff0c;方…

TensorFlow 深度學習 | 三種創建模型的 API

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 TensorFlow 深度學習 | 三種創建模型的 API 在 TensorFlow 中,模型的構建方式非常靈…

LeetCode82刪除排序鏈表中的重復元素 II

文章目錄刪除排序鏈表中的重復元素 II題目描述示例核心思想最優雅解法算法步驟詳解示例1演示&#xff1a;[1,2,3,3,4,4,5]關鍵理解點1. 虛擬頭節點的作用2. 重復檢測邏輯3. 完全刪除重復節點邊界情況處理情況1&#xff1a;空鏈表情況2&#xff1a;單節點情況3&#xff1a;全部重…

藍橋杯算法之基礎知識(6)

目錄 Ⅰ.os操作 Ⅱ.時間庫&#xff08;很重要&#xff09; Ⅲ.基本單位換算&#xff08;ms&#xff0c;min&#xff0c;h的單位換算&#xff09; Ⅳ.時間戳 Ⅴ.文件讀取 Ⅵ.堆 Ⅶ.math操作 Ⅷ.range&#xff08;&#xff09;方法單獨使用 Ⅸ.python 的異常輸出 Ⅹ.for…

多架構/系統圖,搞懂:期貨賬戶體系,太通透了!

Hi,圍爐喝茶聊產品的新老朋友好!上周和大家聊了國內6大期貨交易所清算交收,感興趣的話煩請戳藍色鏈接去學習,就當為下面學習作知識鋪墊,更重要是溫故知新,并保持知識連貫性。另外圍爐特意整理了與賬戶相關的文章,如下所示: “保證金被扣”拆解期貨交易所:清算交收體系…

python-對圖片中的頭像進行摳圖

要實現對圖片中人臉或頭像進行摳圖&#xff0c;可以使用 Python 的 人臉檢測 和 掩碼生成裁剪工具。這里提供幾種實現方法&#xff0c;用于檢測圖片中的人臉區域并實現裁剪效果&#xff1a; 方案 1: 使用 OpenCV 和 Haar級聯檢測人臉并裁剪 步驟 1: 安裝依賴 安裝 OpenCV 和其他…

OpenLayers常用控件 -- 章節一:地圖縮放控件詳解教程

前言在Web地圖開發中&#xff0c;縮放控件是用戶與地圖交互最基本也是最重要的功能之一。OpenLayers作為功能強大的開源地圖庫&#xff0c;提供了多種縮放控件來滿足不同的交互需求。本文將結合一個完整的Vue.js示例&#xff0c;詳細介紹OpenLayers中三種主要的縮放控件&#x…

拓撲學:數學領域的魅力之鑰

拓撲學:數學領域的魅力之鑰 關鍵詞:拓撲學、連續變形、同胚、流形、代數拓撲、點集拓撲、應用數學 摘要:本文深入探討拓撲學這一現代數學的重要分支,從其基本概念到高級理論,從純數學研究到實際應用。我們將從點集拓撲的基礎開始,逐步深入到代數拓撲和微分拓撲的復雜世界…