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

おすすめ

転載: blog.csdn.net/weixin_43639180/article/details/117525879