【數據結構、java學習】數組(Array)

1,概念

  1. 數組一旦定義,其維數和維界就不再改變。
    因此除了結構的初始化和銷毀之外,數組只有存取元素和修改元素值的操作。
  2. Array可以存放對象類型、基本數據類型的數據。
  3. 數組中元素在內存中按順序線性存放,通過第一個元素就能訪問隨后的元素,這樣的數組稱之為“真數組”。

1)java中定義

//一維數組的定義:在內存中開辟一塊連續的存儲空間,大小是 6 * sizeof(float)= 36*4 字節
//二維數組的定義:行連續,每行對應一個一維數組,但是每一行之間不連續。
float f[][] = new float[6][6];
float []f[] = new float[6][6];
float [][]f = new float[6][6];
float [][]f = new float[6][];//賦值:計算a的首地址,計算a[1]偏移量,找到a[1]地址,寫入數據2
a[1] = 2;

2)java中復制數組

當數據量很大時,復制的效率:
System.arraycopy > clone() > Arrays.copyOf> for循環

以上均為淺拷貝;要實現深拷貝,需要在 clone() 方法中手動創建并初始化所有引用類型的屬性,此時要考慮避免循環引用(無限遞歸導致OOM)、破壞類的封裝性。

淺拷貝(Shallow Clone,對應深拷貝):
引用的對象只會拷貝引用地址,而不會將引用的對象重新分配內存

1>System.arraycopy

System類源碼中給出了arraycopy的方法,是native方法,也就是本地方法,肯定是最快的。

//數據量小的時候,for可能快。
public static void arraycopy(Object src,  //源數組int srcPos,  //源數組中的起始位置Object dest, //目標數組int destPos, //目標數據中的起始位置int length)  //要復制的數組元素的數量System.arraycopy(a1, 2, a2, 3, 2);

2>clone()

java.lang.Object類的clone()方法為protected類型,不可直接調用,需要先對要克隆的類進行下列操作:

  1. 被克隆的類實現Cloneable接口;
  2. 被克隆的類覆蓋clone()方法,并且在該clone()方法中調用super.clone();
    //1. 被克隆的類要實現Cloneable接口class Cat implements Cloneable {private String name;private int age;public Cat(String name, int age) {this.name = name;this.age = age;}//2. 重寫clone()方法protected Object clone() throws CloneNotSupportedException {return super.clone();}}
  1. 調用
            //調用clone方法Cat cat2 = (Cat) cat1.clone();

3>Arrays.copyOf()、 copyOfRange()

Arrays.copyOf有十種重載方法,復制指定的數組,返回原數組的副本。
copyOf() 方法是復制數組至指定長度的(新)數組;
copyOfRange() 方法則將指定數組的指定長度復制到一個新數組中。

//newLength大于原數組,會用desc的元素填充,默認為null
T[] copyOf(T[] original, int newLength) 
//endIndex大于原數組,會用desc的元素填充,默認為null
Arrays.copyOfRange(dataType[] srcArray,int startIndex,int endIndex)

4>for循環

直接for循環效率最高,其次是迭代器和 ForEach操作。

3)數組排序

//asc排序
Arrays.sort(nums)
Arrays.sort(int[] a, int fromIndex, int toIndex)//用Comparator接口實現自定義排序規則
Arrays.sort(T[] a, Comparator<? Super T> c)
//舉例:降序
Arrays.sort(arr, new Comparator<Integer>() {//重寫compare方法,最好加注解,不加也沒事public int compare(Integer a, Integer b) {//返回值>0交換return b-a;}
});

2,應用

1)哈希表

把數組的下標設為哈希表的鍵值(key),而把數組中每一個數字設為哈希表的值(value),有了這樣的哈希表,就可以O(1)實現查找。從而快速高效的解決很多問題。

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

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

相關文章

58-正則表達式

1. 概念正則表達式是一種用來匹配字符串的強有力的武器.設計思想&#xff1a;用一種描述性的語言來給字符串定義一個規則&#xff0c;凡是符合規則的字符串&#xff0c;就認為它"匹配"【合法】否則就是不匹配[不合法]舉例&#xff1a;beijinglishao163.com2. 規則 1.…

圖片木馬制作的三種方法

本文轉自&#xff1a;https://www.cnblogs.com/cybersecuritystools/p/14932567.html 0x01什么是圖片木馬&#xff1f; 圖片木馬在網絡上沒有統一的定義&#xff0c;在這里我給出自己的定義。圖片木馬是一張能正常顯示又包含惡意代碼&#xff08;比如一句話木馬&#xff09;的…

【Redis】緩存的穿透、擊穿和雪崩

引言要了解緩存的這幾個相關問題&#xff0c;我們先以一個例子來引入&#xff1a;有一個get請求&#xff1a;api/news/getById/1正常情況下對其申請訪問的流程如圖&#xff1a;但若是如此&#xff0c;訪問增多或者受到攻擊時很容易受到以下問題1 緩存穿透1.1 造成原因當查詢一個…

打造一款高穩定、低延遲、跨平臺RTSP播放器的技術實踐

一、引言 RTSP&#xff08;Real Time Streaming Protocol&#xff09;作為經典的實時流媒體協議&#xff0c;已經深深嵌入到安防監控、遠程教育、工業巡檢、低空經濟、醫療影像傳輸等行業之中&#xff0c;可以說是這些場景的視頻傳輸“基礎設施”。一個穩定的 RTSP 播放器&…

C++_數據結構

數據結構是計算機存儲、組織數據的方式&#xff0c;它使得數據能夠被高效地訪問和修改。根據數據元素之間關系的不同特性&#xff0c;數據結構可以分為多種類型。主要可以分為兩大類&#xff1a;邏輯結構和物理結構&#xff08;也稱存儲結構&#xff09;。 一、邏輯結構&#x…

一個正常的 CSDN 博客賬號,需要做哪些基礎準備?

一個正常的 CSDN 博客賬號&#xff0c;需要做哪些準備&#xff1f; CSDN&#xff08;中國軟件開發網&#xff09;作為國內最具影響力的技術社區之一&#xff0c;不僅是開發者獲取信息的重要平臺&#xff0c;也是技術人建立個人品牌、輸出知識、積累影響力的重要陣地。想要把一…

【Python基礎】 17 Rust 與 Python 運算符對比學習筆記

一、算術運算符運算符Rust &#x1f980;Python &#x1f40d;示例 (Rust)示例 (Python)說明加法加法let sum 5 3;sum 5 3-減法減法let diff 5 - 3;diff 5 - 3*乘法乘法let product 5 * 3;product 5 * 3/除法除法let quotient 5 / 3; → 1quotient 5 / 3 → 1.666...…

單鏈表逆序java

在Java中實現單鏈表的逆序&#xff0c;可以通過迭代或遞歸兩種方式。以下是兩種方法的詳細實現&#xff1a; 1. 迭代方法&#xff08;推薦&#xff09; public class ListNode {int val;ListNode next;ListNode(int x) { val x; } }class Solution {public ListNode reverseLi…

(11)用于無GPS導航的制圖師SLAM(二)

文章目錄 前言 7 構建軟件包 8 開始制圖 9 配置 ArduPilot 10 測試 11 視頻 前言 本頁展示了如何使用 RPLidarA2 激光雷達(RPLidarA2 lidar)設置 ROS 和 Google Cartographer SLAM&#xff0c;為 ArduPilot 提供本地位置估計&#xff0c;使其可以在沒有 GPS 的情況下運行…

1.5、機器學習-回歸算法

1、線性回歸模型 線性回歸模型(Liner Regression)&#xff0c;是利用線性擬合的方式來探尋數據背后的規律。通過搭建線性回歸模型&#xff0c;可以尋找這些散點&#xff08;也稱樣本點&#xff09;背后的趨勢線(也稱回歸曲線)。 借助回歸曲線&#xff0c;我們可以進行一些簡單…

eclipse 安裝 lombok

好久沒有用eclipse&#xff0c;新裝eclipse 發現lombok 沒有生效&#xff0c;如下安裝最省事&#xff0c;無需安裝plugin等。 進入maven 本地目錄&#xff0c;如&#xff1a;org\projectlombok\lombok\1.18.38&#xff0c;點擊lombok jar文件指定eclipse 目錄&#xff0c;安裝完…

linux離線安裝elasticsearch8.19.3

下載: 官網多版本下載: Past Releases of Elastic Stack Software | Elastic github多版本下載: https://github.com/elastic/elasticsearch/releases 上傳后解壓到當前目錄 tar -zxvf elasticsearch-8.19.3-linux-x86_64.tar.gz 或指定解壓目錄 tar -xzf elasticsearch-8…

Uniapp中進行微信小程序頭像和昵稱的更改

一、官方文檔&#xff1a; 1、wx.getUserInfo&#xff08;uni.getUserInfo&#xff09;&#xff1a;基礎庫版本低于2.27.1可用 ① 文檔鏈接&#xff1a; https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.htmlhttps://uniapp.dclou…

交換機詳細

交換機&#xff08;Sritch&#xff09;&#xff1a;一種用于電&#xff08;光&#xff09;信號轉發的網絡設備&#xff0c;可以為接入交換機的任意兩個網絡節點提供獨享的電信號通路。解決什么問題&#xff1f;多臺設備之間的數據交換的問題。因此根據它的功能&#xff0c;它通…

功能強大的多線程端口掃描工具,支持批量 IP 掃描、多種端口格式輸入、掃描結果美化導出,適用于網絡安全檢測與端口監控場景

工具介紹 PortScanner - 多線程端口掃描工具&#xff0c;一款功能強大的多線程端口掃描工具&#xff0c;支持批量 IP 掃描、多種端口格式輸入、掃描結果美化導出&#xff0c;適用于網絡安全檢測與端口監控場景。&#x1f31f; 功能特性 &#x1f50d; 靈活的掃描目標&#xff1…

【OpenHarmony文件管理子系統】文件訪問接口mod_fileio解析

OpenHarmony文件訪問接口mod_fileio解析 概述 mod_fileio模塊是OpenHarmony文件管理API中的核心模塊之一&#xff0c;提供了完整的文件I/O操作功能。該模塊基于Node.js N-API構建&#xff0c;為JavaScript應用提供了豐富的文件系統操作接口&#xff0c;包括文件讀寫、目錄操作、…

js逆向Webpack模塊加載機制解析:從數組到JSONP

1. 概述 Webpack作為現代前端開發中最流行的模塊打包工具&#xff0c;其模塊加載機制值得深入理解。本文將解析Webpack的幾種模塊加載方式&#xff0c;包括數組形式、鍵值對形式和JSONP動態加載。只有理解了它的相關加載機制&#xff0c;我們才可以進行逆向工作。 2. 數組形式的…

Joplin-解決 Node.js 中 “digital envelope routines::unsupported“ 錯誤

解決 Node.js 中 “digital envelope routines::unsupported” 錯誤 在使用 Webpack 構建 Joplin 插件時&#xff0c;你可能會遇到 error:0308010C:digital envelope routines::unsupported 錯誤。這個錯誤看起來很復雜&#xff0c;但實際上有明確的原因和解決方案。 錯誤原因…

UE5 UAT

通過UAT 打包的流程&#xff0c;先整理這么點入口// Engine\Source\Programs\AutomationTool\Program.cs /// <summary> /// Main entry point /// </summary> public partial class Program {public static async Task<int> Main(string[] Arguments){Logge…

Python帶狀態生成器完全指南:從基礎到高并發系統設計

引言&#xff1a;狀態化生成器的核心價值在復雜系統開發中&#xff0c;帶狀態的生成器是處理復雜邏輯的核心工具。根據2024年Python開發者調查報告&#xff1a;78%的狀態機實現使用帶狀態生成器85%的數據管道依賴狀態化生成器92%的并發系統需要狀態管理65%的算法優化通過狀態化…