6. Java入門 [配列]

配列は、同じ型の複数のデータを格納するためのコンテナです。

1. 宣言

//语法
dataType[] arrayRefVar;   // 首选的方法
或
dataType arrayRefVar[];  // 效果相同,但不是首选方法

//示例
double[] myList;         // 首选的方法double myList[];         //  效果相同,但不是首选方法

2. 配列を作成する

//语法
dataType[] arrayRefVar = new dataType[arraySize];
dataType[] arrayRefVar = new dataType[]{
    
    value0, value1, ..., valuek};
dataType[] arrayRefVar = {
    
    value0, value1, ..., valuek};  

配列の要素にはインデックスによってアクセスします。配列のインデックス付けは 0 から始まるため、インデックス値は 0 から になりますarrayRefVar.length-1

//示例
public class TestArray {
    
    
   public static void main(String[] args) {
    
    
      // 数组大小
      int size = 10;
      // 定义数组
      double[] myList = new double[size];
      myList[0] = 5.6;
      myList[1] = 4.5;
      myList[2] = 3.3;
      myList[3] = 13.2;
      myList[4] = 4.0;
      myList[5] = 34.33;
      myList[6] = 34.0;
      myList[7] = 45.45;
      myList[8] = 99.993;
      myList[9] = 11123;
      // 计算所有元素的总和
      double total = 0;
      for (int i = 0; i < size; i++) {
    
    
         total += myList[i];
      }
      System.out.println("总和为: " + total);
   }
}

Java 配列構造の説明

注:new dataType[arraySize]この方法で作成された配列の場合、各項目にはデフォルト値があり、デフォルト値はタイプごとに異なります。

  • byte、short、int、char、long 型の配列の要素のデフォルト値は、0
  • float 型および double 型の配列要素のデフォルト値は次のとおりです。0.0
  • ブール型配列の要素のデフォルト値は ですfalseString型配列の要素のデフォルト値は です。null

3. 配列の走査

myList.length取得できる配列の長さを for ループと組み合わせて使用​​すると、配列を走査して配列内の各項目を処理できます。

//方式一
public class TestArray {
    
    
   public static void main(String[] args) {
    
    
      double[] myList = {
    
    1.9, 2.9, 3.4, 3.5};
 
      // 打印所有数组元素
      for (int i = 0; i < myList.length; i++) {
    
    
         System.out.println(myList[i] + " ");
      }
      // 计算所有元素的总和
      double total = 0;
      for (int i = 0; i < myList.length; i++) {
    
    
         total += myList[i];
      }
      System.out.println("Total is " + total);
      // 查找最大元素
      double max = myList[0];
      for (int i = 1; i < myList.length; i++) {
    
    
         if (myList[i] > max) max = myList[i];
      }
      System.out.println("Max is " + max);
   }
}
//方式二
for(type element: array)
{
    
    
    System.out.println(element);
}

4 番目に、関数のパラメータは配列です。

public static void printArray(int[] array) {
    
    
  for (int i = 0; i < array.length; i++) {
    
    
    System.out.print(array[i] + " ");
  }
}

5. 関数の戻り値は配列です

public static int[] reverse(int[] list) {
    
    
  int[] result = new int[list.length];
 
  for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
    
    
    result[j] = list[i];
  }
  return result;
}

6 つの多次元配列

String[][] str = new String[3][4];

7. ツールアレイ

1. 平等の判断 - 等しい

2 つの配列は、同じ要素が同じ順序で含まれている場合、等しいと見なされます。

package com.itfeiniu.hello;
import java.util.Arrays;

public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        int[] a1 = {
    
    12, 56, 42};
        //声明创建一个数组
        int[] a2 = new int[3];//先定义数组长度
        a2[0] = 12;
        a2[1] = 56;
        a2[2] = 42;
        //给数组赋值
        int[] a3 = {
    
    42, 56, 12};//a3元素和a1相同,顺序不同
        if (Arrays.equals(a1, a2)) {
    
    
            System.out.println("a1和a2相等");
        } else {
    
    
            System.out.println("a1和a2不相等");
        }
        if (Arrays.equals(a1, a3)) {
    
    
            System.out.println("a1和a3相等");
        } else {
    
    
            System.out.println("a1和a3不相等");
        }
    }
}
//a1和a2相等
//a1和a3不相等

2. 正順ソート - ソート

package com.itfeiniu.hello;

import java.util.Arrays;

public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        int[] myList = new int[3];
        myList[0] = 3;
        myList[1] = 1;
        myList[2] = 2;
        Arrays.sort(myList);
        for (int i = 0; i < myList.length; i++) {
    
    
            System.out.println(myList[i]);
        }
    }
}
//1
//2
//3

3. フィルフィル

package com.itfeiniu.hello;
import java.util.Arrays;

public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        int[] myList = new int[3];
        Arrays.fill(myList, 10);
        for (int i = 0; i < myList.length; i++) {
    
    
            System.out.println(myList[i]);
        }
    }
}
//10
//10
//10

4. 検索-バイナリ検索

package com.itfeiniu.hello;

import java.util.Arrays;

public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        int[] myList = new int[3];
        myList[0] = 30;
        myList[1] = 10;
        myList[2] = 20;
        Arrays.sort(myList);//必须先做排序
        System.out.println(Arrays.binarySearch(myList, 20));
        System.out.println(Arrays.binarySearch(myList, 1));
    }
}
//1
//-1

二分探索アルゴリズムを使用して、指定された配列で指定された値のオブジェクト (Byte、Int、double など) を検索します。配列は呼び出す前にソートする必要があります。ルックアップ値が配列に含まれている場合は検索キーのインデックスを返し、それ以外の場合は (-(挿入点) - 1) を返します。

5. string-toString に変換する

package com.itfeiniu.hello;

import java.util.Arrays;

public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        int[] myList = new int[3];
        myList[0] = 30;
        myList[1] = 10;
        myList[2] = 20;
        Arrays.sort(myList);
        System.out.println(Arrays.toString(myList));
    }
}
//[10, 20, 30]

8、アレイストレージ

JVM には 3 種類のメモリ領域があります。

  • メソッド領域
  • スタックメモリ
  • ヒープメモリ

変数と配列の保管ケースの説明:int a=20;int[] arr=new int[3];

  • a は [stack] に直接配置される変数です。変数 a に格納されるデータは値 20 です。
  • new int[3] は、3 つの整数を格納するために [ヒープ メモリ] 内に領域を開く配列オブジェクトを作成します。
  • arr は変数です。 [stack] には、arr はヒープ メモリ内の配列オブジェクトのアドレス値を格納します

同じ配列を指す複数の変数:

package com.itfeiniu.hello;
public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        int[] arr1 = {
    
    11, 22, 33};
        int[] arr2 = arr1;
        arr2[1] = 222;//改了arr2,arr1也同时改变。引用类型。
        System.out.println(arr1[1]);
        System.out.println(arr2[1]);//引用类型,arr2存储在栈中,存储了arr1的内存地址值
    }
}
//222
//222

配列変数に格納されているアドレスが の場合null 、その変数は配列オブジェクトを指さなくなります。

10. ArrayList コレクション

ArrayListコレクションは配列に似ています。違いは、コレクションとジェネリックは基本データ型をサポートせず、参照データ型のみをサポートすることです。

package com.itfeiniu.hello;

import java.util.ArrayList;
public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        ArrayList arr=new ArrayList();
        arr.add("a");
        arr.add("b");
        arr.add("c");
        for (int i = 0; i < arr.size(); i++) {
    
    
            System.out.println(arr.get(i));
        }
    }
}
//a
//b
//c

java17 ArrayList 公式 Web サイトのドキュメント

11. シンプルなレストランの配膳システム

ここでは、Scanner対話型コマンド ラインを使用して、注文と提供の機能シミュレーションを実現します。
コードは全部で 3 つあり、具体的なコードは次のとおりです。

  1. HelloWorld.java エントリ ファイル
  2. Food.java 料理
  3. FoodOperator.java 料理操作クラス
//HelloWorld.java
package com.itfeiniu.hello;

public class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        FoodOperator operator = new FoodOperator();
        operator.start();
    }
}
package com.itfeiniu.hello;

import java.util.ArrayList;
import java.util.Scanner;

public class FoodOperator {
    
    
    private ArrayList<Food> foodList = new ArrayList<>();

    public void addFood() {
    
    
        Food f = new Food();

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入该菜品名称:");
        String name = sc.next();
        f.setName(name);

        System.out.println("请输入该菜品价格:");
        Double price = sc.nextDouble();
        f.setPrice(price);

        System.out.println("请输入该菜品描述:");
        String decs = sc.next();
        f.setDesc(decs);

        foodList.add(f);
        System.out.println("上架成功!");
    }

    public void showAllFood() {
    
    
        if (foodList.size() == 0) {
    
    
            System.out.println("请先上架菜品!");
            return;
        }
        for (int i = 0; i < foodList.size(); i++) {
    
    
            Food f = foodList.get(i);
            System.out.println(f.getName());
            System.out.println(f.getPrice());
            System.out.println(f.getDesc());
            System.out.println("------------------------");
        }
    }

    public void start() {
    
    
        while (true) {
    
    
            System.out.println("请选择功能:");
            System.out.println("1、上架菜品");
            System.out.println("2、展示菜品");
            System.out.println("3、退出");
            Scanner sc = new Scanner(System.in);
            String command = sc.next();
            switch (command) {
    
    
                case "1":
                    addFood();
                    break;
                case "2":
                    showAllFood();
                    break;
                case "3":
                    System.out.println("欢迎下次再来!");
                    return;
                default:
                    System.out.println("您输入的命令不存在");
                    break;
            }
        }
    }
}
package com.itfeiniu.hello;

public class Food {
    
    
    String name;
    double price;
    String desc;

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public double getPrice() {
    
    
        return price;
    }

    public void setPrice(double price) {
    
    
        this.price = price;
    }

    public String getDesc() {
    
    
        return desc;
    }

    public void setDesc(String desc) {
    
    
        this.desc = desc;
    }
}

コマンドラインの実行プロセスは次のとおりです。

请选择功能:
1、上架菜品
2、展示菜品
3、退出
1
请输入该菜品名称:
黄瓜
请输入该菜品价格:
2.5
请输入该菜品描述:
夏天吃起来很应季
上架成功!

请选择功能:
1、上架菜品
2、展示菜品
3、退出
1
请输入该菜品名称:
红烧肉
请输入该菜品价格:
12.5
请输入该菜品描述:
非常下饭的一道菜
上架成功!
请选择功能:
1、上架菜品
2、展示菜品
3、退出
2
黄瓜
2.5
夏天吃起来很应季
------------------------
红烧肉
12.5
非常下饭的一道菜
------------------------
请选择功能:
1、上架菜品
2、展示菜品
3、退出
3
欢迎下次再来!

Process finished with exit code 0

おすすめ

転載: blog.csdn.net/bobo789456123/article/details/131798577