Java 配列コード例の概要
概要:
この記事では、主に配列とコンテナ、配列の作成と初期化、配列とジェネリック、配列と変数パラメータリスト、など、Javaの配列に関する知識を説明します。 Arrayのツールクラスの実用的な関数を使って、配列を5つの側面から詳細に記述し、要約します。
1. 重要なポイント概要
配列とコンテナ
配列の作成と初期化
配列と変数パラメータのリスト
配列ツールクラスの概要実用的な関数の
- 2. 配列とコンテナ
オブジェクト
を保持できます。オブジェクトを保持する必要がある場合、どのような場合に配列を優先し、どのような場合にコンテナを優先する必要があるでしょうか。
効率
- Java では、
-
配列は最も効率的なストレージおよびランダム アクセス オブジェクトです。順次方式。配列は単純な線形シーケンスであるため、要素へのアクセスが非常に高速になります。
ただし、この速度の代償は、配列オブジェクトのサイズが固定されており、その存続期間中中変更できないことです。 ArrayList はスペースの自動割り当てを実現でき、柔軟性が高いため、通常は配列よりも ArrayList を優先する必要がありますが、この柔軟性にはオーバーヘッドが必要です。したがって、ArrayList は配列よりも効率が大幅に低くなります。 Types JDK 1.5 より前の Java ではジェネリックスが導入されていませんでした。したがって、ジェネリックスの前の
コンテナクラスがオブジェクトを処理する場合、オブジェクトは特定の型を持たないものとして扱われます。つまり、これらのオブジェクトは Object - として扱われます。ジェネリック以前に配列がコンテナーよりも優れている理由は、特定の型を保持する配列を作成できるためです。つまり、コンパイル時の型チェックによって、不適切な型が挿入されたり、不適切な型が抽出されたりすることを防ぐことができます。
もちろん、Java はコンパイル時と実行時の両方で、オブジェクトに不適切なメッセージを送信することを防ぎます。したがって、どちらの方法が安全性が低いというわけではありませんが、コンパイル中にエラーを指摘できた方がよりエレガントになります。
基本型を保存する機能 配列は基本型を保持できますが、ジェネリックの前のコンテナーは保持できません。
-
さらに、ジェネリックは配列にとって大きな脅威であり、通常、この 2 つはうまく組み合わせられません (パラメータ化された型を持つ配列はインスタンス化できません)。
したがって、最新の Java バージョン を使用して をプログラムする場合、 は配列よりもコンテナを優先する必要があります。 パフォーマンスが問題であり、配列に切り替えるとパフォーマンスが向上することが証明されている場合にのみ、配列を使用するようにプログラムをリファクタリングする必要があります。
"[ ]" 構文は配列オブジェクトにアクセスする唯一の方法です。
- 2. 作成と初期化
- 配列の初期化の一部として暗黙的に作成されます
String[] strs = { ... }; // 创建方式 1 --- 花括号内对象的个数就是数组大小System.out.println(strs.length); // 输出 0
Use new Expression明示的な作成
String[] strs = new String[5]; //创建方式 2String[] ss = new String[]{ ... }; //创建方式 3
3, 多次元配列
多次元配列の本質: 配列の要素は依然として配列です
りー4. 配列とジェネリック
配列とジェネリックはうまく組み合わせることができません。つまり、パラメータ化された型を持つ配列はインスタンス化できません
// 创建方式 1int[][] a = { { 1, 2, 3, }, { 4, 5, 6, }, }; // 创建方式 2int[][][] a = new int[2][2][4];//粗糙数组:每个向量具有任意长度Random rand = new Random(47); // 3-D array with varied-length vectors: int[][][] a = new int[rand.nextInt(7)][][]; for(int i = 0; i < a.length; i++) { a[i] = new int[rand.nextInt(5)][]; for(int j = 0; j < a[i].length; j++) a[i][j] = new int[rand.nextInt(5)]; }
ログイン後にコピー
- ジェネリックコンテナはジェネリック配列よりも常に優れた選択肢です。
5. 配列と変数パラメータ型
1. 変数パラメータ型の概念
Java SE5 では、「Type... args」の形式で変数パラメータ型 (Variable Argument Type) が追加されました。メソッド へのパラメータとしてのみ使用できます。 変数パラメータのリストは、パラメータの数は不確実だが型は確実である状況に適しています (Java は変数パラメータを配列として扱います)。
変数パラメータ リストは最後の項目になければならないという事実に特別な注意を払う必要があります (つまり、最大 1 つの変数パラメータのみがサポートされます)。
複数の可変パラメータリストがある場合、項目のうちの 1 つが最後の項目であってはいけないため、サポートされる可変パラメータは 1 つだけです。可変パラメータリスト内のパラメータの数は不確実であるため、その後ろに同じ型のパラメータがある場合、Java は渡されたパラメータが前の可変パラメータに属するか次のパラメータに属するかを区別できないため、可変パラメータを配置することしかできません。最後に一品。
T[] first = new T[3]; // ERROR A<String>[] arrays = new A<String>[4]; // ERROR: Cannot create a generic array of A<String>
- 変数パラメーターを使用してメソッドを呼び出すと、コンパイラーは暗黙的に変数パラメーターの配列を作成するため、Access を使用できます。配列
の形式の変数パラメーター リスト (コンパイラーは変数パラメーターを配列として扱います) 。
2. 変数パラメータの型と配列の互換性 コンパイラは、配列の型と変数パラメータの型を同じものと見なします。つまり、 ;
A<String>[] arrays; // OK
ログイン後にコピー可変パラメータは配列型パラメータと互換性がありますが、配列型パラメータは可変パラメータと互換性がありません;
Object[] objs = new String[3]; // OK
ログイン後にコピー実際、サンプルコード2の場合、必要なメソッドは1つだけですdealArray(int, int, int) または dealArray(int…) として定義されたメソッドとして。したがって、当然のことながら、 dealArray(int[]) メソッドと配列型パラメータを一致させることは不可能です。 parameter一致する原則:固定長の方法と一致する場合、// 代码示例public class TestVarArgus { public static void dealArray(int... intArray){ for (int i : intArray) System.out.print(i +" "); System.out.println(); } public static void main(String args[]){ dealArray(); dealArray(1); dealArray(1, 2, 3); } }/* Output: 1 1 2 3 *///:~
ログイン後にコピーはこの方法と一致するように優先度を与えます。 main
関数 | 概要 | 注 |
---|---|---|
System.arraycopy(Object src, int srcPos, Object dest, int, int length) | 指定されたものからソース 配列内の配列をコピーします。コピーは、ターゲット配列の指定された位置から開始され、指定された位置で終了します。 | オブジェクト配列をコピーする場合、オブジェクトの参照のみがコピーされます。オブジェクト自体 (浅いコピー); このメソッドでは自動ラッピングと自動アンパックは実行されないため、2 つの配列は同じ型でなければなりません コピーとして新しい配列オブジェクトを明示的に作成する必要があります。 |
指定された配列をコピーし、 | をnullでインターセプトするか、新しい配列オブジェクトを返します。新しい配列の長さが元の配列の長さを超える場合は、配列のデフォルト値を維持します | 对于以上两个方法:
2、数组的字符串方式表示 方法: Arrays.toString(Object[] a) / Arrays.deepToString(Object[] a) 作用: 返回指定数组内容的字符串表示形式:前者适用于一维数组,或者适用于多维数组 3、数组的比较 方法: Arrays.equals(Object[] a, Object[] a2) / deepEquals(Object[] a1, Object[] a2) (多维) 作用: 比较两个数组:元素类型相同,元素个数相等,对应位置的元素相同; 注意:
int[] a1 = new int[10]; int[] a2 = new int[10]; Arrays.fill(a1, 47); Arrays.fill(a2, 47); print(Arrays.equals(a1, a2)); //true ログイン後にコピー 4、数组的排序 使用内置的排序方法,就可以对任意的基本类型数组排序;也可以对任意的对象数组进行排序,只要该对象实现了 Comparable 接口或具有相关联的 Comparator (独立的实现该接口的类)。 方法: Arrays.sort(Object[] a) / Arrays.sort(Object[] a, int fromIndex, int toIndex) 作用: 对数组内元素进行升序排序 (默认) String[] sa = Generated.array(new String[20], new RandomGenerator.String(5)); // 利用 String 内置的比较器(已实现 Comparable 接口):字典序(大写字母开头的词都放在前面输出,之后才是小写字母开头的词)Arrays.sort(sa); // ... ,WHkjU, YNzbr, bkIna, cQrGs, .... // 利用 Comparator 比较 : Collections.reverseOrder() : 现有顺序的逆序Arrays.sort(sa, Collections.reverseOrder()); // 利用 Comparator 比较 : String.CASE_INSENSITIVE_ORDER : 忽略大小写将单词一起进行排序Arrays.sort(sa, String.CASE_INSENSITIVE_ORDER); ログイン後にコピー Java 标准类库中的排序算法针对正排序的特殊类型进行了优化 ———— 针对基本类型设计的“快排” 和 针对对象设计的“稳定归并排序”。所以,无需担心排序的性能,除非你可以证明排序部分的确是程序效率的瓶颈。 5、在已排序的数组中查找 若数组已经 排好序,就可以使用该方法执行快速查找;若对未排序的数组使用该方法,将产生不可预料的结果。 方法: binarySearch(Object[] a, Object key) / binarySearch(T[] a, T key, Comparator super T> c) 作用: 使用 二分搜索法 来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据元素的自然顺序对数组进行升序排序(通过 sort(Object[]) 方法); 使用二分搜索法来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据指定的比较器(通过 sort(T[], Comparator) 方法)对数组进行多态升序排序。 注意:
関数: 各位置には同じ値のみを埋め込むことができます。同じオブジェクトの参照をコピーして埋めるだけです 関数: 指定されたオブジェクトでサポートされている 固定サイズを返しますarray List
配列の代わりにコンテナを使用することを推奨します。
以上がJava 配列コード例の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。 このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
![]() ホットAIツール![]() Undresser.AI Undressリアルなヌード写真を作成する AI 搭載アプリ ![]() AI Clothes Remover写真から衣服を削除するオンライン AI ツール。 ![]() Undress AI Tool脱衣画像を無料で ![]() Clothoff.ioAI衣類リムーバー ![]() AI Hentai GeneratorAIヘンタイを無料で生成します。 ![]() 人気の記事
R.E.P.O.説明されたエネルギー結晶と彼らが何をするか(黄色のクリスタル)
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最高のグラフィック設定
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
アサシンのクリードシャドウズ:シーシェルリドルソリューション
2週間前
By DDD
R.E.P.O.誰も聞こえない場合はオーディオを修正する方法
4週間前
By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:Myriseのすべてのロックを解除する方法
1 か月前
By 尊渡假赌尊渡假赌尊渡假赌
![]() ホットツール![]() メモ帳++7.3.1使いやすく無料のコードエディター ![]() SublimeText3 中国語版中国語版、とても使いやすい ![]() ゼンドスタジオ 13.0.1強力な PHP 統合開発環境 ![]() ドリームウィーバー CS6ビジュアル Web 開発ツール ![]() SublimeText3 Mac版神レベルのコード編集ソフト(SublimeText3) ![]() ホットトピック
Gmailメールのログイン入り口はどこですか?
![]() ![]()
CakePHP チュートリアル
![]() ![]()
Steamのアカウント名の形式は何ですか
![]() ![]()
NYTの接続はヒントと回答です
![]() ![]() ![]() Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。 ![]() Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。 ![]() この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。 ![]() Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです ![]() Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。 ![]() カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4 ![]() |