Javaの配列参照付与{{Javaのはいれつ:さんしょうわりあて}}
21252 ワード
Javaの配列参照付与{{Javaのはいれつ:さんしょうわりあて}}
ここではJavaにおけるバブルソートを例に分析する
参照付与は、単純な付与操作ではなく、オブジェクトbに付与操作を行うことによって、オブジェクトaに対して値を変更することができる動作である.
上記のプログラムでは、配列numの値を変更し、配列nは影響を受けません.
Javaでのバブルソートでは、main関数でバブルソートを使用することでソートの目的を達成します.
配列参照付与を使用すると、別のクラスのメソッドを使用してmain関数の配列を操作できます.
これは修正後のBubble.javaです.実行すると、配列値は変更されていません.プログラム出力は次の図のようになります.
Original array is:10 9 8 7 6 5 4 3 2 1 Sorted array is:10 9 8 7 6 5 4 3 2 1
これは,引用を行わずに賦値のみを行うことであり,引用賦値が行われていないことから,多くの作業が無駄であることが分かる.
以下は、参照付与後のBubble.javaです.
Bubbletestのコンストラクション関数は、"="のみを使用して配列nをnum参照に渡すことに注意してください.最初のコードよりずっと簡単なコードは1行しかありませんが、これこそ本当の配列参照付与操作です.
この方法は配列オブジェクトだけでなく,Javaでは配列をオブジェクトとして実現するため,他のオブジェクトにも同様に適用される.
ここではJavaにおけるバブルソートを例に分析する
参照付与は、単純な付与操作ではなく、オブジェクトbに付与操作を行うことによって、オブジェクトaに対して値を変更することができる動作である.
// n num
int i;
for(i = 0; i < length; ++i)
num[i] = n[i];
上記のプログラムでは、配列numの値を変更し、配列nは影響を受けません.
Javaでのバブルソートでは、main関数でバブルソートを使用することでソートの目的を達成します.
配列参照付与を使用すると、別のクラスのメソッドを使用してmain関数の配列を操作できます.
//Bubble.java
public class Bubble {
public static void main(String[] args) {
int[] num = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int length = 10;
System.out.print("Original array is:");
for(int i = 0; i < length; ++i)
System.out.print(num[i] + " ");
System.out.println();
Bubbletest B = new Bubbletest(num, length);
B.Sort();
System.out.print("Sorted array is:");
for(int i = 0; i < length; ++i)
System.out.print(num[i] + " ");
System.out.println();
}
}
class Bubbletest{
int[] num;
int length;
int tmp;
boolean flag = false;
Bubbletest(int[] n , int length) {
int i;
for(i = 0; i < length; ++i)
num[i] = n[i];
this.length = length;
}
void Sort() {
for(int i = 1; i < length; ++i){
for (int j = length - 1; j >= i; --j) {
if(num[j - 1] > num[j]) {
tmp = num[j - 1];
num[j - 1] = num[j];
num[j] = tmp;
flag = true;
}
}
if(!flag)
break;
}
}
}
これは修正後のBubble.javaです.実行すると、配列値は変更されていません.プログラム出力は次の図のようになります.
Original array is:10 9 8 7 6 5 4 3 2 1 Sorted array is:10 9 8 7 6 5 4 3 2 1
これは,引用を行わずに賦値のみを行うことであり,引用賦値が行われていないことから,多くの作業が無駄であることが分かる.
以下は、参照付与後のBubble.javaです.
//Bubble.java
public class Bubble {
public static void main(String[] args) {
int[] num = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int length = 10;
System.out.print("Original array is:");
for(int i = 0; i < length; ++i)
System.out.print(num[i] + " ");
System.out.println();
Bubbletest B = new Bubbletest(num, length);
B.Sort();
System.out.print("Sorted array is:");
for(int i = 0; i < length; ++i)
System.out.print(num[i] + " ");
System.out.println();
}
}
class Bubbletest{
int[] num;
int length;
int tmp;
boolean flag = false;
Bubbletest(int[] n , int length) {
num = new int[length];
num = n; // “=” n num
this.length = length;
}
void Sort() {
for(int i = 1; i < length; ++i){
for (int j = length - 1; j >= i; --j) {
if(num[j - 1] > num[j]) {
tmp = num[j - 1];
num[j - 1] = num[j];
num[j] = tmp;
flag = true;
}
}
if(!flag)
break;
}
}
}
Bubbletestのコンストラクション関数は、"="のみを使用して配列nをnum参照に渡すことに注意してください.最初のコードよりずっと簡単なコードは1行しかありませんが、これこそ本当の配列参照付与操作です.
この方法は配列オブジェクトだけでなく,Javaでは配列をオブジェクトとして実現するため,他のオブジェクトにも同様に適用される.