搜尋
首頁Javajava教程java怎麼自訂類別封裝數組實作資料操作

陣列做為一種基礎的資料儲存結構,應用十分廣泛。陣列是用連續的記憶體空間來儲存固定長度的、相同資料型別的一種資料結構。資料結構是跟語言無關的,這裡,使用java來進行數組的相關操作。數組的索引是從0開始的。

java怎麼自訂類別封裝數組實作資料操作

一數組初始化

創建資料有兩種方式,一種是先宣告一個固定長度的數據,然後再給數組賦值,另一種是直接賦值。

第一種

数据类型[] 数组名称 = new 数据类型[长度];

這裡的[]標識這宣告了一個數組,這個[]除了可以放在資料型別後面,也可以放在數組名詞後面,效果一樣。假如我申明一個長度為2long#類型的數組,並賦值:

long[] arr = new long[2];
arr[0] = 1;
arr[1] = 2;

第二種

数据类型[] 数组名称 = {元素1,元素2, ...};

這樣在陣列初始化的時候直接給陣列賦值,陣列的長度由元素的個數決定。

二自訂類別封裝陣列實作資料運算

public class MyArray {

    // 自定义数组    private long[] arr;
    // 有效数据长度    private int element;

    public MyArray(){
        arr = new long[9];
    }

    public MyArray(int maxsize){
        arr = new long[maxsize];
    }
    /**
     * 显示数组元素
     */    public void display(){
        System.out.print("[");
        for (int i = 0; i <h4 id="新增元素">2.1 新增元素</h4><p>陣列是用連續的記憶體空間來儲存資料的,則每次新增的時候會往目前數組的最後一個元素上加入元素,一次就可以加上元素,所以它的複雜度為O(1),假如定義一個長度為<code>9</code>數組,數組中已經有兩個元素,則加入第三個元素如下:</p><p><img  src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/887/227/168187380584798.png?x-oss-process=image/resize,p_40" class="lazy" alt="java怎麼自訂類別封裝數組實作資料操作" ></p><pre class="brush:php;toolbar:false">public void add(long value){
    arr[element] = value;
    element++;
}

2.2 根據值查詢元素位置

#這種查找方式也叫做線性查找,就是根據傳入的值循環去遍歷元素,來取得對應的位置,理論上平均查詢一個元素需要花費N/2次,所以它的複雜度為O(N)。

public int find(long value){
    int i;
    for (i = 0; i <h4 id="根據索引查詢元素">2.3 根據索引查詢元素</h4><p>根據索引來找出元素,也就是取得對應位置的元素,其複雜度為O(1)。 </p><pre class="brush:php;toolbar:false">public long get(int index){
    if(index >= element || index <h4 id="根據索引刪除元素">2.4 根據索引刪除元素</h4><p>刪除對應索引的元素後,我們需要將所有改索引後面的元素,向前移動一位。假如我要刪除索引為2的元素,如下:</p><p><img  src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/887/227/168187380647226.png?x-oss-process=image/resize,p_40" class="lazy" alt="java怎麼自訂類別封裝數組實作資料操作" ></p><p>理論上平均刪除一個元素,我們需要移動N/2次,所以它的時間複雜度也為O(N)。 </p><pre class="brush:php;toolbar:false">public void delete(int index){
    if(index >= element || index <h4 id="修改元素">2.5 修改元素</h4><p>修改某個位置的元素,直接根據索引就一次就可以修改對應的元素,所以它的時間複雜度為O(1)。 </p><pre class="brush:php;toolbar:false">public void change(int index,long newValue){
    if(index >= element || index <h3 id="三-有序數組">三 有序數組</h3><p>有序數組是數組的一種特殊類型,有序數組中的元素按照某種順序進行排列。 </p><h4 id="新增元素">3.1 新增元素</h4><p>在新增元素的時候,將元素依序新增到某個位置。如下,在一個陣列中加入一個<code>33</code>的元素。 </p><p><img  src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/887/227/168187380636989.png?x-oss-process=image/resize,p_40" class="lazy" alt="java怎麼自訂類別封裝數組實作資料操作" ></p><p>首先,將索引為3的元素移動到索引為4的位置,然後將索引為2的元素移動到索引為3的位置,最後將33添加到索引為2的位置。理論上插入一個元素需要移動元素的個數為N/2個,所以它的時間複雜度為O(N)。 </p><pre class="brush:php;toolbar:false">public void add(long value){
    int i;
    for (i = 0; i value){
            break;
        }
    }

    for (int j = element; j > i; j--){
        arr[j] = arr[j-1];
    }
    arr[i] = value;
    element++;
}

3.2 二分法根據元素查詢索引

在無序數組中,使用線性法進行查找相關元素,線性法即按索引按個查找。有序數組可以使用二分法來找出元素,而二分法是指將一個陣列從中間分成兩個,判斷元素位於哪個陣列中,然後重複這樣的運算。

假如有8個元素的一個數組,數組內容為有序的0-7的序列,要找出5這個元素,第一次分成0-3和4-7兩個數組,然後再將4-7分成4-5和6-7兩個數組,最後再將4-5分成4和5就查詢出來具體的元素了,這樣分割3次就可以查詢出長度為8的數組中具體的元素,其複雜度即為O(logN)(logN在計算機中底數一般指的是2,意思為2的幾次方等於n)。

public int search(long value){
    // 中间值    int middle = 0;
    // 最小值    int low = 0;
    // 最大值    int pow = element;
    while (true){
        middle = (low + pow) / 2;
        if(arr[middle] == value){
            return middle;
        }else if (low > pow){
            return -1;
        }else{
            if(arr[middle] > value){
                pow = middle - 1;
            }else{
                low = middle + 1;
            }
        }
    }
}

四總結

複雜度越低代表演算法比較優秀,所以O(1) > O(logN) > O(N) > O(N^2) 。

O(N)O(logN)O(1)O(N)O(N)
演算法 複雜度
線性找出
二分法找出
無序陣列插入
有順序陣列插入
無序陣列刪除
  1. 有序數組刪除

    O(N)
####無序數組插入快,查找和刪除慢############有序數組查找快,插入和刪除慢#########

以上是java怎麼自訂類別封裝數組實作資料操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
JVM性能與其他語言JVM性能與其他語言May 14, 2025 am 12:16 AM

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生產性。 1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

Java平台獨立性:使用示例Java平台獨立性:使用示例May 14, 2025 am 12:14 AM

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允許CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

JVM架構:深入研究Java虛擬機JVM架構:深入研究Java虛擬機May 14, 2025 am 12:12 AM

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

JVM:JVM與操作系統有關嗎?JVM:JVM與操作系統有關嗎?May 14, 2025 am 12:11 AM

JVMhasacloserelationshipwiththeOSasittranslatesJavabytecodeintomachine-specificinstructions,managesmemory,andhandlesgarbagecollection.ThisrelationshipallowsJavatorunonvariousOSenvironments,butitalsopresentschallengeslikedifferentJVMbehaviorsandOS-spe

Java:寫一次,在任何地方跑步(WORA) - 深入了解平台獨立性Java:寫一次,在任何地方跑步(WORA) - 深入了解平台獨立性May 14, 2025 am 12:05 AM

Java實現“一次編寫,到處運行”通過編譯成字節碼並在Java虛擬機(JVM)上運行。 1)編寫Java代碼並編譯成字節碼。 2)字節碼在任何安裝了JVM的平台上運行。 3)使用Java原生接口(JNI)處理平台特定功能。儘管存在挑戰,如JVM一致性和平台特定庫的使用,但WORA大大提高了開發效率和部署靈活性。

Java平台獨立性:與不同的操作系統的兼容性Java平台獨立性:與不同的操作系統的兼容性May 13, 2025 am 12:11 AM

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允許Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

什麼功能使Java仍然強大什麼功能使Java仍然強大May 13, 2025 am 12:05 AM

JavaispoperfulduetoitsplatFormitiondence,對象與偏見,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

頂級Java功能:開發人員的綜合指南頂級Java功能:開發人員的綜合指南May 13, 2025 am 12:04 AM

Java的頂級功能包括:1)面向對象編程,支持多態性,提升代碼的靈活性和可維護性;2)異常處理機制,通過try-catch-finally塊提高代碼的魯棒性;3)垃圾回收,簡化內存管理;4)泛型,增強類型安全性;5)ambda表達式和函數式編程,使代碼更簡潔和表達性強;6)豐富的標準庫,提供優化過的數據結構和算法。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具