Java配列の特徴と基本的な使用テクニック
5407 ワード
1.配列の特徴について
1)Javaでは,配列やコンテナを用いても境界チェックがある.境界を越えて操作するとRuntimeException異常が発生します.
2)配列は特定のタイプしか保存できません.配列は基本タイプを保存できますが、コンテナは保存できません.コンテナはオブジェクトを特定のタイプで処理せず、すべてのオブジェクトをObjectタイプで処理します.
3)コンテナクラスはオブジェクトの参照のみを保存できます.配列は、基本タイプを直接保存したり、オブジェクトの参照を保存したりするために作成できます.コンテナでは、Integer、Doubleなどのパッケージクラスを使用して、基本データ型値の保存を実現できます.
4)オブジェクト配列と基本型配列は使用上ほぼ同じである.唯一の違いは、オブジェクト配列が参照を保存し、基本タイプ配列が基本タイプの値を保存することです.
2.配列定義について
1)配列は定義時に空間を割り当てることができない.定義が完了すると、配列にスペースを割り当てることができます.
int num[];
num=new int[3];
または
int num[]=new int[3];
に注意
int [] num=new int[]{1,2,3};//ok
int [] num=new int[3]{1,2,3};//error;
2)このように2次元配列を定義することができる.
int [][] num;
//or
num=new int[3][];
num[0]=new int[5];
num[1]=new int[3];
num[2]=new int[2];
3)2 D配列の初期値.
3.配列初期化について
オブジェクト配列は作成当初nullに自動的に初期化され、元のデータ型からなる配列はゼロ(数値型)、(Char)0(文字型)、またはfalse(ブール型)に自動的に初期化されます.
4.配列参照に関する質問
int[] a1 = { 1, 2, 3, 4, 5 };
int[] a2;
a2 = a1;//ここではリファレンスをコピーしただけです
次のコードを参照してください.
結果:
a1[0] = 1
a1[1] = 2
a1[2] = 3
a1[3] = 4
a1[4] = 5
-----after change a2------
a1[0] = 2
a1[1] = 3
a1[2] = 4
a1[3] = 5
a1[4] = 6
-----after change a2[0]------
a2[0]=333
a1[0]=333
----- a2------
a2[0] = 333
a2[1] = 3
a2[2] = 4
a2[3] = 5
a2[4] = 6
配列a 1およびa 2は、常に同じオブジェクトを操作する.
5.配列に関する動作
1)Javaでは、すべての配列にデフォルトの属性lengthがあり、配列内の要素の個数を取得します.
2)配列の複製:System.arraycopy().
3)配列の並べ替え:Arrays.sort().
4)並べ替えられた配列内の要素:Arrays.binarySearch().
6.配列の並べ替え操作について
1)オブジェクト配列のソートは、Comparableインタフェースを実装する必要があります.
結果:
number=1,name=zhangsan
number=2,name=lisi
number=3,name=wangwu
2)numを第1キーワード、nameを第2キーワードとしてソート
結果:
number=1,name=zhangsan
number=2,name=lisi
number=3,name=mybole
number=3,name=wangwu
7.javaについて.util.Arrays
1)java.util.Class Arrays’s architecture
java.lang.Object
|
+--java.util.Arrays
2)説明
このクラスは基本的に静的メソッドを提供し、ユーザーは配列操作を行い、binarySearch():配列内の特定の要素の検索、equals():2つの配列が等しいかどうか(同じ位置の要素が等しいかどうか)、fill():配列充填、sort():配列ソートを比較します.
1)Javaでは,配列やコンテナを用いても境界チェックがある.境界を越えて操作するとRuntimeException異常が発生します.
2)配列は特定のタイプしか保存できません.配列は基本タイプを保存できますが、コンテナは保存できません.コンテナはオブジェクトを特定のタイプで処理せず、すべてのオブジェクトをObjectタイプで処理します.
3)コンテナクラスはオブジェクトの参照のみを保存できます.配列は、基本タイプを直接保存したり、オブジェクトの参照を保存したりするために作成できます.コンテナでは、Integer、Doubleなどのパッケージクラスを使用して、基本データ型値の保存を実現できます.
4)オブジェクト配列と基本型配列は使用上ほぼ同じである.唯一の違いは、オブジェクト配列が参照を保存し、基本タイプ配列が基本タイプの値を保存することです.
2.配列定義について
1)配列は定義時に空間を割り当てることができない.定義が完了すると、配列にスペースを割り当てることができます.
int num[];
num=new int[3];
または
int num[]=new int[3];
に注意
int [] num=new int[]{1,2,3};//ok
int [] num=new int[3]{1,2,3};//error;
2)このように2次元配列を定義することができる.
int [][] num;
//or
num=new int[3][];
num[0]=new int[5];
num[1]=new int[3];
num[2]=new int[2];
3)2 D配列の初期値.
int [][] num=new int[][]{1,2,3,4,5,5}; //error
int [][] num=new int[][]{{1,2,3},{4,5,5}}; //ok
int [][] num=new int[2][]{{1,2,3},{4,5,5}}; //error
int [][] num={{1,2,3},{4,5,6}}; //ok
3.配列初期化について
オブジェクト配列は作成当初nullに自動的に初期化され、元のデータ型からなる配列はゼロ(数値型)、(Char)0(文字型)、またはfalse(ブール型)に自動的に初期化されます.
4.配列参照に関する質問
int[] a1 = { 1, 2, 3, 4, 5 };
int[] a2;
a2 = a1;//ここではリファレンスをコピーしただけです
次のコードを参照してください.
public class Arrays {
public static void main(String[] args) {
int[] a1 = { 1, 2, 3, 4, 5 };
for (int i = 0; i < a1.length; i++)
System.out.println("a1[" + i + "] = " + a1[i]);
int[] a2;
a2 = a1;
for (int i = 0; i < a2.length; i++)
a2[i]++;
System.out.println("-----after change a2------");
for (int i = 0; i < a1.length; i++)
System.out.println("a1[" + i + "] = " + a1[i]);
System.out.println("-----after change a2[0]------");
a2[0] = 333;
System.out.println("a2[0]=" + a2[0]);
System.out.println("a1[0]=" + a1[0]);
System.out.println("----- a2------");
for (int i = 0; i < a2.length; i++)
System.out.println("a2[" + i + "] = " + a2[i]);
}
}
結果:
a1[0] = 1
a1[1] = 2
a1[2] = 3
a1[3] = 4
a1[4] = 5
-----after change a2------
a1[0] = 2
a1[1] = 3
a1[2] = 4
a1[3] = 5
a1[4] = 6
-----after change a2[0]------
a2[0]=333
a1[0]=333
----- a2------
a2[0] = 333
a2[1] = 3
a2[2] = 4
a2[3] = 5
a2[4] = 6
配列a 1およびa 2は、常に同じオブジェクトを操作する.
5.配列に関する動作
1)Javaでは、すべての配列にデフォルトの属性lengthがあり、配列内の要素の個数を取得します.
2)配列の複製:System.arraycopy().
3)配列の並べ替え:Arrays.sort().
4)並べ替えられた配列内の要素:Arrays.binarySearch().
6.配列の並べ替え操作について
1)オブジェクト配列のソートは、Comparableインタフェースを実装する必要があります.
import java.util.Arrays;
class Student implements Comparable {
int num;
String name;
Student(int num, String name) {
this.num = num;
this.name = name;
}
public String toString()// toString() , main:System.out.println(ss[i]);
{
return "number=" + num + "," + "name=" + name;
}
public int compareTo(Object o) {
Student s = (Student) o;
return num > s.num ? 1 : (num == s.num ? 0 : -1);
}
}
class ArrayTest {
public static void main(String[] args) {
Student[] ss = new Student[] { new Student(1, "zhangsan"),
new Student(2, "lisi"), new Student(3, "wangwu") };
Arrays.sort(ss);
for (int i = 0; i < ss.length; i++) {
System.out.println(ss[i]);
}
}
}
結果:
number=1,name=zhangsan
number=2,name=lisi
number=3,name=wangwu
2)numを第1キーワード、nameを第2キーワードとしてソート
import java.util.Arrays;
class Student implements Comparable {
int num;
String name;
Student(int num, String name) {
this.num = num;
this.name = name;
}
public String toString() {
return "number=" + num + "," + "name=" + name;
}
public int compareTo(Object o) {
Student s = (Student) o;
int result = num > s.num ? 1 : (num == s.num ? 0 : -1);
if (0 == result) {
result = name.compareTo(s.name);
}
return result;
}
}
class ArrayTest {
public static void main(String[] args) {
Student[] ss = new Student[] { new Student(1, "zhangsan"),
new Student(2, "lisi"), new Student(3, "wangwu"),
new Student(3, "mybole") };
Arrays.sort(ss);
for (int i = 0; i < ss.length; i++) {
System.out.println(ss[i]);
}
}
}
結果:
number=1,name=zhangsan
number=2,name=lisi
number=3,name=mybole
number=3,name=wangwu
7.javaについて.util.Arrays
1)java.util.Class Arrays’s architecture
java.lang.Object
|
+--java.util.Arrays
2)説明
このクラスは基本的に静的メソッドを提供し、ユーザーは配列操作を行い、binarySearch():配列内の特定の要素の検索、equals():2つの配列が等しいかどうか(同じ位置の要素が等しいかどうか)、fill():配列充填、sort():配列ソートを比較します.