搜尋
首頁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刪除
带你搞懂Java结构化数据处理开源库SPL带你搞懂Java结构化数据处理开源库SPLMay 24, 2022 pm 01:34 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

Java集合框架之PriorityQueue优先级队列Java集合框架之PriorityQueue优先级队列Jun 09, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

完全掌握Java锁(图文解析)完全掌握Java锁(图文解析)Jun 14, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

一起聊聊Java多线程之线程安全问题一起聊聊Java多线程之线程安全问题Apr 21, 2022 pm 06:17 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

Java基础归纳之枚举Java基础归纳之枚举May 26, 2022 am 11:50 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

详细解析Java的this和super关键字详细解析Java的this和super关键字Apr 30, 2022 am 09:00 AM

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

Java数据结构之AVL树详解Java数据结构之AVL树详解Jun 01, 2022 am 11:39 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于平衡二叉树(AVL树)的相关知识,AVL树本质上是带了平衡功能的二叉查找树,下面一起来看一下,希望对大家有帮助。

一文掌握Java8新特性Stream流的概念和使用一文掌握Java8新特性Stream流的概念和使用Jun 23, 2022 pm 12:03 PM

本篇文章给大家带来了关于Java的相关知识,其中主要整理了Stream流的概念和使用的相关问题,包括了Stream流的概念、Stream流的获取、Stream流的常用方法等等内容,下面一起来看一下,希望对大家有帮助。

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具