Java配列とArraysクラス
30856 ワード
ツールバーの配列が必要なのはなぜですか? 配列概要 配列宣言と初期化 静的初期化 動的初期化 デフォルト初期化 配列の遍歴 配列のコピー Arraysクラス 多次元配列 なぜ配列が必要なの?
私が学んだ最初のプログラミング言語のC言語は、C言語には集合タイプがなく、複雑なデータが配列で保存されているので、配列は当然の必然的な存在だと思います.今考えてみると、なぜ配列を使う必要があるのでしょうか.答えは、同じデータ型を持つ複数のデータを同じ管理する必要がある場合、配列で迅速に実現できると思います.
配列の概要
ジルコニウム配列は、同じタイプのデータの秩序化された集合である.配列は同じタイプのいくつかのデータを記述し,一定の前後順に並べて組み合わせたものである.各データは要素と呼ばれ、各要素はインデックス(下付き)でアクセスできます.配列の3つの基本的な特徴:1.長さは決定される.配列が作成されると、そのサイズは変更できません. 2.要素は同じタイプでなければなりません.ブレンドタイプは許可されません. 3.配列タイプは、基本タイプおよび参照タイプを含む任意のデータ型であってもよい.
配列宣言と初期化
配列の宣言の例:
スタティツクイニシャル
は、配列を定義しながら配列要素に空間を割り当て、値を割り当てることができます.
ダイナミック初期化
配列の定義は、配列要素に空間を割り当て、値を割り当てる操作とは別に行われます.
デフォルト初期化
配列は参照タイプであり、その要素はクラスのインスタンス変数に相当するため、配列が割り当てられると、各要素もインスタンス変数と同様に暗黙的に初期化される.
配列の遍歴
配列要素の下に表示される合法区間:[0,length-1]、区間を超えるとプログラム実行時に境界異常が発生します.配列内の要素を下付きで巡回したり、要素の値を読み出したり、要素の値を変更したりすることができます. 配列を使用する場合、forループを使用して要素の値を読み取るか、要素を変更することができます.foreachループを使用して読み取ることはできません(foreachループについては、Javaベース構文-foreachを参照してください).以下のようにします.
配列のコピー
Systemクラスにはstatic void arraycopy(object src,int src,object dest,int destpos,int length)メソッドも含まれており、このメソッドは配列のコピーを実現することができ、具体的なパラメータの意味は簡単に言えば、System.arraycopy(ソース配列、ソース配列の開始位置、ターゲット配列、ターゲット配列の開始位置、コピーする要素数)である.
例を挙げて感じてみましょう.
Arraysクラス
JDKが提供するjava.util.Arraysクラスは、一般的な配列操作を含み、私たちの日常開発の一般的なクラスです.Arraysクラスには、ソート、検索、塗りつぶし、印刷などの一般的な操作が含まれています.一般的な方法:
方法
説明
String toString(int[] a)
配列要素の値を印刷します.入力パラメータは印刷対象配列です.
void sort(int[] a)
配列要素のソート、参照タイプはComparableを実装する必要があります
int binarySearch(long[] a, long key)
二分法で指定した要素を検索し、検索要素の下付き文字を返します.
void fill(long[] a, long val)
配列を塗りつぶす
もちろん、これらのメソッドの変数タイプはすべてのデータ型であり、Arraysには多くのリロードがあります.
ここでのtoStringの方法は、ObjectのtoStringとは異なり、ObjectのtoStringを書き換えるのではなく、パラメータ付きのリロードであることに注意してください.
Arraysクラスのインスタンスを作成します.
たじゅうはいれつ
2 Dおよび多次元配列は、配列の各要素であり、配列である.(ロシア套娃...)しかし、実際の開発では非常に少ない.最大2 D配列(コンテナが一般的に使用され、2 D配列はほとんど使用されません).
1次元配列と類似していることを宣言します.初期化する時、まず第1層を初期化して、更に第2層を初期化して、このようにします;遍歴するとネストされたループを使用して、1つ1つ取り出します.ここでは少し回りくどいと思うかもしれませんが、コードをたくさん叩いて遊び、やってみて、本当のことを実践して、例を挙げてみましょう.
ネストループの遍歴については理解できるかもしれませんが、声明については個人的な理解でもう一度説明します.
1次元配列を宣言したい場合は、次のようにします.1.まず、それは配列であるので、[]を書いて配列であることを表します. 2.次に配列にintタイプが入っているので、[]intと書いてintタイプの配列を表します. 3.この宣言配列に名前を付けますので、[]int myListと書いて、myListというintタイプの配列を表します.しかし、このように書くのは面白くないので、Javaは規定して、私たちは形成しなければなりません:int[]myListは声明します. 4.以上の宣言が完了した後、初期化を行います:int[]myList=new int[2];なお,ここではnewキーワードを用い,newされるのはすべてオブジェクトであり,int時の基本データ型はnewされない.new[]は、newの配列であり、配列中にintタイプ、要素個数2、すなわちnew[]int 2、変形:new int[2]、すなわちint[]myList=new int[2];この割当てスペースが完了すると、値を割り当てることができます.
2 D配列を宣言したい場合は、上記の手順を参照してください.1.まず、それは配列であるので、[]を書いて配列であることを表します. 2.次に配列に配列タイプが組み込まれているので、intタイプの配列を表すには[][]と書きます. 3.このとき2番目の配列はまだ宣言されていません.この配列にはintタイプが入っています.だから、[][]intと書いてintタイプの配列を表します.(より高い次元配列を宣言するにはintを[]に変更し、最後の次元配列に要素が組み込まれているタイプが配列ではないまで繰り返します) 4.この宣言配列に名前を付けるので、[]int myListと書きます.Javaの構文フォーマットによって規定されているので、int[][]myListで宣言するように変形します. 5.以上の宣言が完了した後、初期化を行います.まずnewの1次元配列:new[]で、配列の中で配列タイプ:[]で、要素の個数は2で、つまりnew[]2です.ただし、配列は単独では存在しません.データ型の配列でなければなりません.したがって、最後の次元のデータ型:intを追加します.すなわち、new int[2][]と書く.なお、このとき2次元配列はnewされず、1つのnewキーワードでは2つのオブジェクトをnewできない.私たちはnewの2次元を続けなければなりません. 6.配列を初期化する:new int[3];(3つの要素)newから出た配列をこの2次元配列に割り当てる、すなわちmyList[0]=new int[3]; 7.もう一つの配列を初期化する:new int[4];(4つの要素)newから出た配列をこの2次元配列に割り当てる、すなわちmyList[1]=new int[4];これでmyList配列はすべて満たされ,これにより空間割り当てが完了し,付与が可能になる.
以上、私個人の理解ですが、理解に誤りがあればご指摘ください.
私が学んだ最初のプログラミング言語のC言語は、C言語には集合タイプがなく、複雑なデータが配列で保存されているので、配列は当然の必然的な存在だと思います.今考えてみると、なぜ配列を使う必要があるのでしょうか.答えは、同じデータ型を持つ複数のデータを同じ管理する必要がある場合、配列で迅速に実現できると思います.
配列の概要
ジルコニウム配列は、同じタイプのデータの秩序化された集合である.配列は同じタイプのいくつかのデータを記述し,一定の前後順に並べて組み合わせたものである.各データは要素と呼ばれ、各要素はインデックス(下付き)でアクセスできます.配列の3つの基本的な特徴:
配列宣言と初期化
配列の宣言の例:
double[] myList; //
double myList[]; // , , C/C++
スタティツクイニシャル
は、配列を定義しながら配列要素に空間を割り当て、値を割り当てることができます.
int[] myList = new int[] { 1,2,3,4,5 }; // , 3
Man[] mans = { new Man(1, 1), new Man(2, 2) };//
ダイナミック初期化
配列の定義は、配列要素に空間を割り当て、値を割り当てる操作とは別に行われます.
int[] myList = new int[5]; // , null
myList[0] = 1;
myList[1] = 2;
myList[2] = 3;
myList[3] = 4;
myList[4] = 5;
デフォルト初期化
配列は参照タイプであり、その要素はクラスのインスタンス変数に相当するため、配列が割り当てられると、各要素もインスタンス変数と同様に暗黙的に初期化される.
int a2[] = new int[2]; // :0,0
boolean[] b = new boolean[2]; // :false,false
String[] s = new String[2]; // :null, null
配列の遍歴
配列要素の下に表示される合法区間:[0,length-1]、区間を超えるとプログラム実行時に境界異常が発生します.配列内の要素を下付きで巡回したり、要素の値を読み出したり、要素の値を変更したりすることができます. 配列を使用する場合、forループを使用して要素の値を読み取るか、要素を変更することができます.foreachループを使用して読み取ることはできません(foreachループについては、Javaベース構文-foreachを参照してください).以下のようにします.
public class Test {
public static void main(String[] args){
int[] myList = new int[4];
// for ,
for (int i = 0; i < myList.length; i++) {
myList[i] = i;
}
// for ,
for (int i = 0; i < myList.length; i++) {
System.out.print(myList[i]);
}
System.out.println();
// foreach ,
for (int i : myList) {
System.out.print(i);
}
}
}
---------------------------------------------------------------
:
0123
0123
配列のコピー
Systemクラスにはstatic void arraycopy(object src,int src,object dest,int destpos,int length)メソッドも含まれており、このメソッドは配列のコピーを実現することができ、具体的なパラメータの意味は簡単に言えば、System.arraycopy(ソース配列、ソース配列の開始位置、ターゲット配列、ターゲット配列の開始位置、コピーする要素数)である.
例を挙げて感じてみましょう.
public class Test {
public static void main(String[] args) {
String[] myList1 = { "a", "b", "c", "d" };
String[] myList2 = new String[10];
System.arraycopy(myList1, //
1, // , 0
myList2, //
5, // , 0
2); //
for (String string : myList2) {
System.out.print(string+"\t");
}
}
}
-----------------------------------------------------
:
null null null null null b c null null null
Arraysクラス
JDKが提供するjava.util.Arraysクラスは、一般的な配列操作を含み、私たちの日常開発の一般的なクラスです.Arraysクラスには、ソート、検索、塗りつぶし、印刷などの一般的な操作が含まれています.一般的な方法:
方法
説明
String toString(int[] a)
配列要素の値を印刷します.入力パラメータは印刷対象配列です.
void sort(int[] a)
配列要素のソート、参照タイプはComparableを実装する必要があります
int binarySearch(long[] a, long key)
二分法で指定した要素を検索し、検索要素の下付き文字を返します.
void fill(long[] a, long val)
配列を塗りつぶす
もちろん、これらのメソッドの変数タイプはすべてのデータ型であり、Arraysには多くのリロードがあります.
ここでのtoStringの方法は、ObjectのtoStringとは異なり、ObjectのtoStringを書き換えるのではなく、パラメータ付きのリロードであることに注意してください.
Arraysクラスのインスタンスを作成します.
public class Test {
public static void main(String[] args) {
String[] myList = { "b", "c", "d", "a" };
System.out.println(myList); //
System.out.println(Arrays.toString(myList)); //
Arrays.sort(myList);// sort
System.out.println(Arrays.toString(myList)); // ;
System.out.println(" :"+Arrays.binarySearch(myList, "c"));//
Arrays.fill(myList, 1, 3, "e"); // [1,3) "e";
System.out.println(Arrays.toString(myList));
}
}
--------------------------------------------------------------------
:
[Ljava.lang.String;@7852e922
[b, c, d, a]
[a, b, c, d]
:2
[a, e, e, d]
たじゅうはいれつ
2 Dおよび多次元配列は、配列の各要素であり、配列である.(ロシア套娃...)しかし、実際の開発では非常に少ない.最大2 D配列(コンテナが一般的に使用され、2 D配列はほとんど使用されません).
1次元配列と類似していることを宣言します.初期化する時、まず第1層を初期化して、更に第2層を初期化して、このようにします;遍歴するとネストされたループを使用して、1つ1つ取り出します.ここでは少し回りくどいと思うかもしれませんが、コードをたくさん叩いて遊び、やってみて、本当のことを実践して、例を挙げてみましょう.
String[][] s = null; //
s = new String[2][]; // , : 2 。
//new String[2][], []
s[0] = new String[2]; // 0 ,
s[1] = new String[3]; // 1 ,
s[0][0] = new String("Good"); // 0 0
s[0][1] = new String("Luck"); //...
s[1][0] = new String("to");
s[1][1] = new String("you");
s[1][2] = new String("!");
for (String[] strings : s) {
for (String strings2 : strings) { // foreach
System.out.println(strings2);
}
}
-------------------------------------------
:
Good
Luck
to
you
!
ネストループの遍歴については理解できるかもしれませんが、声明については個人的な理解でもう一度説明します.
1次元配列を宣言したい場合は、次のようにします.
2 D配列を宣言したい場合は、上記の手順を参照してください.
以上、私個人の理解ですが、理解に誤りがあればご指摘ください.