検索
ホームページJava&#&チュートリアルカスタム クラスを使用して Java で配列をカプセル化し、データ操作を実装する方法

基本的なデータ ストレージ構造として、配列は広く使用されています。配列は、連続メモリ空間を使用して、固定長同じデータ型を格納するデータ構造です。データ構造は言語に依存せず、配列関連の操作には Java が使用されます。配列のインデックスは 0 から始まります。

カスタム クラスを使用して Java で配列をカプセル化し、データ操作を実装する方法

配列の初期化

データを作成するには 2 つの方法があります。1 つは、最初に固定長データを宣言してから、配列に値を割り当てる方法です。 . もう 1 つは、 1 つ目は直接代入です。

最初の型:

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

ここの [] マークは配列を宣言します。この [] は、データ型の後に配置するだけでなく、データ型の後ろに配置することもできます。名詞の後でも効果は同じです。長さ 2 の型 long の配列を宣言し、値を割り当てた場合:

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

2 番目の :

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

このように、配列の初期化時に直接値が代入され、配列の長さは要素数によって決まります。

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> の長さの配列を定義すると、配列にはすでに 2 つの要素があります</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>インデックスに対応する要素を削除した後、インデックスの後のすべての要素を 1 つ前に移動する必要があります。インデックス 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="順序付き配列">3 順序付き配列</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 に移動し、最後にインデックス 2 に 33 を加算します。理論的には、要素の挿入には 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 要素に基づいてインデックスをクエリする二分法

順序なし配列で、関連する要素を見つけるには線形法を使用します。線形法とは、インデックスに従って 1 つずつ検索することです。ソートされた配列では、二分法を使用して要素を見つけることができます。二分法とは、配列を中央から 2 つに分割し、その要素がどちらの配列にあるかを判断し、この操作を繰り返すことを意味します。

8 要素を持つ配列があるとします。配列の内容は 0 ~ 7 の順序付けられたシーケンスです。要素 5 を見つけるには、要素 5 を 0 ~ 3 と 4 に分割します。初回は -7 2 つの配列、次に 4-7 を 2 つの配列 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;
            }
        }
    }
}

4 つのまとめ

複雑さが低いほどアルゴリズムが優れていることを意味するため、O(1) > O(logN) > O(N) > O(N^2) となります。 。

#O(logN)#順序なし配列の挿入順序付き配列の挿入順序なし配列の削除#順序付き配列の削除
アルゴリズム 複雑さ
線形探索 O (N)
二分探索
O( 1)
O(N)
O( N)
O(N)
    ##順序なし配列挿入は高速ですが、検索と削除は低速です。
  1. 順序付けされた配列の検索は高速ですが、挿入と削除は低速です

以上がカスタム クラスを使用して Java で配列をカプセル化し、データ操作を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境