基本的なデータ ストレージ構造として、配列は広く使用されています。配列は、連続メモリ空間を使用して、固定長と 同じデータ型を格納するデータ構造です。データ構造は言語に依存せず、配列関連の操作には Java が使用されます。配列のインデックスは 0 から始まります。
配列の初期化
データを作成するには 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 (N) |
二分探索 | #O(logN)|
O( 1) | |
O(N) | |
O( N) | |
O(N) |
- ##順序なし配列挿入は高速ですが、検索と削除は低速です。
- 順序付けされた配列の検索は高速ですが、挿入と削除は低速です
以上がカスタム クラスを使用して Java で配列をカプセル化し、データ操作を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ホットトピック



