Java基礎文法学習 day06---初心者は詳しい解説を必読
1. アレイ
1.1 配列とは
- プログラム = アルゴリズム + データ構造;
- 先ほど学習した if、if-else、スイッチ、ループはすべてプロセスの問題、つまりアルゴリズムの問題を解決します。
- いわゆるデータ構造とは、単に特定の構造に従ってデータを格納することを意味し、合理的なデータ構造を設計することが問題を解決するための前提条件です。
- 配列は最も基本的なデータ構造です。
- 相同数据类型的元素组成的集合
- 元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素(“一个跟一个”)
- 可以通过元素所在位置的顺序号(下标)做标识来访问每一个元素(下标从0开始,最大到元素个数-1)
1.2 配列の定義
配列を宣言するための構文:
数据类型[ ] 数组名 = new 数据类型 [ 大小 ] ;
例: int [ ] arr = new int [ 10 ] ;
例証します:
- 配列型 int[] は、配列内の各要素が int 型であることを示します。
- 配列型変数(参考)。
- 配列の長さ、つまり配列内の要素の数。
1.3 配列の初期化
基本型の配列が作成された後、その要素の初期値: byte、short、char、int、long は 0、float と double は 0.0、boolean は false になります。配列の要素は同時に初期化できます。配列宣言として、たとえば次のようになります
。
int [ ] arr = {
10,23,30,-10,21 } ;
この書き方は宣言時の初期化のみに使用でき、代入には使用できません。たとえば、次のコードではコンパイル エラーが発生します。
int [ ] arr;
arr = {
10,23,30,-10,21 } ;
宣言された配列型変数は、次の方法で初期化できます。
int [ ] arr ;
arr = new int[ ]{
10,23,30,-10,96 } ;
注: []内に長さは記述できません。要素数が配列の長さになります。
1.4 配列アクセス
配列の長さを取得する
配列の長さは、配列の length プロパティを呼び出して取得できます。
int[] arr = new int[]{
3,6,8,9 };
int len = arr . length ;
System.out.println(“数组长度为:” + len);
上述代码输出结果为:数组长度为:4
添字による配列要素へのアクセス
配列内の要素には添え字によってアクセスします。
例如:
int[ ] arr = new int[]{
4,5,6,8};
int temp = arr [ 2 ]; // 获取第3个元素—6
// 交换数组下标为2和3的两个相邻元素的值
int temp = arr [ 2 ] ;
arr [ 2 ] = arr [ 3 ] ;
arr [ 3 ] = temp ;
// 交换后结果:4,5,8,6
配列要素を反復処理する
配列要素を走査し、通常は for ループ ステートメントを選択します。ループ変数は配列要素にアクセスするための添字として使用され、配列内の各要素にアクセスできます。
int[] arr = new int[10];
for ( int i = 0 ; i < arr.length ; i ++ ){
arr [ i ] = 100;
}
注: ループ カウンタは 0 から長さ - 1 まで変化します。
配列要素を走査し、正の順序で出力します
int [ ] arr = new int [ ] {
10,20,30,40,50 } ;
for ( int i=0; i< arr.length; i++) {
System.out.println ( arr[ i ] ) ;
}
配列要素を走査し、逆順に出力します
int [ ] arr = new int [ ] {
10,20,30,40,50 } ;
for ( int i = (arr.length -1) ; i >= 0 ; i -- ) {
System.out.println ( arr[ i ] ) ;
}
演習: 配列要素の最大値を見つけます。
1.5 配列のコピー
System.arraycopy メソッドは配列のコピーに使用されます
配列は System.arraycopy( ) メソッドを使用してコピーできます。
public static void arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
src – 源数组
srcPos – 源数组中的起始位置
dest – 目标数组
destPos – 目标数组中的起始位置
length – 要复制的数组元素的数量
System.arraycopy メソッドは配列のコピーに使用されます
int[ ] a = {
10 ,20 ,30 ,40 ,50 };
int[ ] a1 = new int[ 6 ] ;
System.arraycopy( a , 1 , a1 , 0 , 4 );
配列をコピーするための Arrays.copyOf メソッド
配列は、java.util.Arrays クラスの copyOf メソッドを使用してコピーできます。
类型[ ] newArray = Arrays.copyOf (
类型[ ] original , int newLength );
特徴: 生成された新しい配列は、元の配列のコピーです
。 newLength がソース配列より小さい場合、インターセプトされます。
newLength がソース配列より大きい場合、0 または null で埋められます。
したがって、生成された新しい配列は、ソース配列の長さよりも大きくなる可能性があります。
int [ ] a = {
10,20,30,40,50 } ;
int [ ] a1 = Arrays . copyOf ( a, 6 );
a1数组元素为: 10 20 30 40 50 0
配列の拡張
配列の長さは、作成後に変更することはできません。いわゆる拡張とは、新しいより大きな配列を作成し、元の配列の内容をそこにコピーすることを指します。
配列は Arrays.copyOf() メソッドを使用して簡単に拡張できます。
int [ ] a = {
10,20,30,40,50 } ;
a = Arrays . copyOf ( a, a.length+1 );
输出a数组元素:10,20,30,40,50,0
演習: 配列要素の最大値を見つけて、それを最後の場所に置きます。
- 配列の要素の最大値を検索し、その最大値を配列の最後の要素の次の位置に配置します。
1.6 配列のソート
配列のソート命令
排序是对数组施加的最常用的算法;
所谓排序,是指将数组元素按照从小到大或从大到小的顺序重新排列;
对于元素较多的数组,排序算法的优劣至关重要;
一般情况下,通过排序过程中数组元素的交换次数来衡量排序算法的优劣;
常用的排序算法有:插入排序、冒泡排序、快速排序等。
配列バブルソートアルゴリズム
- バブルソートの原理: 隣接する要素を比較し、最後の順序の基準に違反している場合は交換します。
- これは次のように単純化して理解できます。
- 初めてすべての要素の中で最大のものを見つけ、それを変更せずに最後の位置に配置します。
- 2 度目に残りのすべての要素のうち最大のものを見つけ、それを変更せずに最後から 2 番目の位置に置きます。
- 並べ替えが完了するまで続きます。
- 比較は「沈む」または「浮く」のいずれかで行うことができます。
バブルソートアルゴリズムの実装
- 次の 12 個の要素を含む配列を宣言し、バブル ソートを実行します
[32, 58, 38, 48, 43, 60, 13, 34, 20, 47, 87, 20]
import java.util.Random;
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
//创建数组
int[] arr = new int[10];
Random ran = new Random();
for (int i = 0; i < arr.length; i++) {
arr[i] = ran.nextInt(100);
}
System.out.println(Arrays.toString(arr));
// 冒泡排序
System.out.println("----------冒泡排序 开始----------");
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
System.out.println(Arrays.toString(arr));
}
System.out.println("----------冒泡排序 结束----------");
System.out.println(Arrays.toString(arr));
}
}
配列をソートするための Arrays.sort メソッド
JDK が提供する Arrays.sort() メソッドは、配列ソート アルゴリズムをカプセル化します。
int[ ] arr = {
49, 81, 1, 64, 77, 50, 0, 54, 77, 18 };
Arrays.sort ( arr ) ;
for( int i=0; i<arr.length; i++) {
System.out.println( arr[i] );
}
输出结果:0 1 18 49 50 54 64 77 77 81