ホームページ >Java >&#&チュートリアル >Java 学習の概要の配列 (整理および共有)

Java 学習の概要の配列 (整理および共有)

WBOY
WBOY転載
2022-04-01 12:01:332699ブラウズ

この記事では、java に関する関連知識を提供し、主に配列を使用する理由、配列の定義、配列の初期化、配列の関数など、配列に関連する問題を紹介します。 、など、皆さんの参考になれば幸いです。

Java 学習の概要の配列 (整理および共有)

#推奨学習: 「

java チュートリアル

1. 配列を使用する理由と配列の定義

1.1 配列を使用する理由

質問 1:

変数を宣言する場合、個々の変数は変数名に対応する必要がありますが、今度は配列のデータのグループを処理する必要がある場合に使用します。同じタイプです。クラス内の 100 人の年齢を表したいが、全員の年齢を表すために 100 個の変数を定義したくない場合は、どうすればよいでしょうか?次の例をもう一度考えてみましょう。

int age = 17;//年齢を示します

質問 2:

2 つの数値の合計を求めるには、メソッドが必要です。5 の合計を求めるには、メソッドが必要です。数値の場合、100 個の数値の合計、1000 個の数値の合計、および 10000 個の数値の合計を見つけるメソッドをオーバーロードする必要があります。メソッドのパラメーター リストは非常に長くなり、多くのメソッドが存在します。どのメソッドが 2 つのパラメータを持ち、どのメソッドが 3 つのパラメータを持っているかを覚えておくためです。これは常に非常に不快に感じられます。この関数を注意深く分析すると、実際には一連の値の合計を求めるだけです。このメソッドは特定の加数の数を気にせず、どの数値を加算する必要があるかだけを気にします。 。

マスターのアドバイス: メソッドの仮パラメータを定義するときは、5 を超えないようにするのが最善です。

1.2 配列とは


簡単に言えば、それはデータのセット、つまりデータの山です。いわゆる配列とは、プログラミングにおける処理の便宜のために、同じ型の

複数の変数 を整然と並べたデータ形式 です。この 同じ種類のデータを一定の順序で並べたものを配列 と呼びます。配列内の各データは配列要素と呼ばれます。配列内の要素には、その格納場所を示すインデックスが付けられます。インデックスは 0 から始まり、ステップ サイズは 1 です。これは、Excel テーブルの行番号が行を増やしていくのと似ています。行ごとに。

1.3 配列の定義

方法 1 (

使用推奨

):

配列要素の型[ ] 配列名。 # 方法 2: 配列要素の型 配列名[]; 例: int age[];

注:

配列は使用する前に初期化する必要があります。初期化とは、メモリ内にスペース

を割り当てることを意味するためです。 2. 配列の初期化

Java の配列は、使用する前に初期化する必要があります, いわゆる初期化とは、配列にメモリを割り当てることです。要素を作成し、各要素にメモリを割り当てます。 初期値を割り当てます。

配列を初期化する 2 つの方法は、

静的初期化

動的初期化に分けられます。配列がどちらの方法であっても、 initialized初期化が完了すると、再初期化しない限り、配列の長さは固定されます。つまり、配列は固定長の

です。

配列は固定長です: 配列が正常に初期化されると、配列内の要素の数は固定され、変更できません。変更する必要がある場合は、再初期化することのみ可能です。 2.1 配列の静的初期化 各配列要素の初期化値を設定するのは私たちであり、配列の長さはシステム (JVM) によって決定されます。 構文:

配列要素の型 [] 配列名 =

new

配列要素タイプ []{要素 1, 要素 2, 要素 3,...};

例:

int[] nums = 新しい int[]{1,3,5,7,9};

簡単な書き方、宣言後すぐに初期化する必要がある、先に宣言してから初期化することはできない; int[] nums = {1,3,5,7,9};

配列の静的初期化操作と再割り当て操作の図

#2.2 配列の動的初期化

配列の設定は私たち次第です。 要素数 (配列長) と各配列要素の初期値はシステムによって決定されます。

# 構文:

配列要素タイプ[] 配列名 = 新しい配列要素タイプ[length ];

例:

    int[] ages = new  int[
100
];

注:

int[] nums = new int[5]{1,3,5, 7,9};//書き方が間違っています。 静的初期化と動的初期化を同時に使用することはできません

2.3 静的初期化をいつ使用するか、動的初期化をいつ使用するか?

#どんなデータを保存する必要があるかが事前にわかっている場合は

#静的初期化を選択します; どのようなデータを保存する必要があるかが事前にわからない場合は、

動的初期化

;## を使用することしかできません。 #Java では、次のようにデータ型に初期値が設定されます。

データ型

0 0L0F#

三、数组基本操作(一维数组)

3.1 数组基本操作:

  • 获取元素: 元素类型 变量 =  数组名[index];
  • 设置元素: 数组名[index] = 值;
  • 遍历数组元素: 建议使用for循环,因为for循环事先知道循环的次数
  • 数组长度int len = 数组名.length;  length是属性,不是方法.
  • 索引范围:  从0开始,逐一递增。  [0,数组名.length-1]

3.2 操作数组常见异常:

NullPointerException:空指针异常(空引用)。

出现该异常的原因:当数组还未初始化,就直接操作数组

如以下代码:

String[] bs = null;

System.out.println(bs.length)

ArrayIndexOutOfBoundsException:数组的索引越界异常。

出现该异常的原因:根据索引取出数据元素时,输入了超出数组索引范围之外的值。

如下代码:

int[] nums = {1,3,5,7,9};

int a = nums[4];

3.3 获取数组最大最小元素

/**
 * 求数组最大值
 *
 * @param nums
 * @return
 */
public static int getMax(int[] nums) {
    int result = 0;
    for (int i = 0; i 9c7b11bfa3ff5f0940b8ea5c0821c84e num) {
            result = num;
        }
    }
    return result;
}

3.4 打印数组元素

        当我们直接使用System.out.println()打印数组的时候,打印出来是hashCode值,如

int[] nums = new int[]{1, 3, 5, 7, 9};

System.out.println(nums);

我们不喜欢,我们想打印数组的时候,把该数组的元素打印出来,这时需要循环遍历打印

int[] nums = new int[]{1, 3, 5, 7, 9};
for (int i = 0; i 3f40d6801d52824bc5cc39707ea4ab57= 0; i--) {
        result[index] = nums[i];
        index++;
    }
    return result;
}

3.6 线性搜索:元素出现索引(第一次/最后一次)

        数组的线性搜索指得就是挨个遍历,查找数组中与key相同的元素,若查找不到则可以返回-1(惯例,自定义),其效率为O(n)。

例子:int[] arr = {10,20,30,10,50,-30,10};获取元素10在arr数组中第一次出现的索引和最后一次出现的索引

/**
 * 获取数组中指定元素第一次出现的索引
 *
 * @param nums
 * @param element
 * @return
 */
public static int indexOf(int[] nums, int element) {
    for (int i = 0; i ed78c9b2c0c5a5caec46ff34a5fe5ba5= 0; i--) {
        if (element == nums[i]) {
            return i;
        }
    }
    return -1;
}

四、多维数组

        在前面的文章中我们有提到数组其实就是是多个数据的集合。如果现在有多个数组,我想把多个数组保存在一个集合中,此时我又应该如何完成呢?此时就需要引入多维数组的概念。多维数组其实就是把整个数组看成一个元素,存放到另一个数组当中去

多维数组的语法:

数组元素类型[] 数组名;

例如如下定义二维数组的格式

int[][]  arr = new int[][]   {

  arr1 ,arr2,arr3

};

int[][]  arr = new int[][]   {

  {1,2,3} ,

  {4,5},

  {6}

};

4.1 多维数组和一维数组的区别

  • 一维数组:数组中的每一个元素都是一个值(基本类型和引用类型的值);
  • 二维数组:数组中的每一个元素又是一个一位数组;
  • 三维数组:数组中的每一个元素又是一个二维数组;

注意:严格上说在Java中不存在多维数组的概念。为了和C语言做区分一般称之为数组中的数组

4.2 二维数组的初始化操作

静态初始化

int[][]  arr = new int[][]   {

  {1,2,3} ,

  {4,5},

  {6}

};

动态初始化

 int[][]  arr = new int[3][5] ;//创建一个长度为3的二维数组,每一个元素(一维数组)的长度为5。

针对于N维数组,需要N个循环嵌套。

五、Java5对数组的新语法支持

        Java5对数组的新语法支持主要是增强for循环(foreach)方法的可变参数

5.1 增强for循环-foreach

在之前我们使用for循环的打印元素操作如下

int[] nums = new int[]{1, 3, 5, 7, 9};
for (int i = 0; i fc94e68f7aa2711b3ffbc52bdc58654b语法糖。<p><strong>注意</strong>:语法糖的最大甜头就是让开发者写更少、更简单的代码,完成相同的功能。<span style="color:#4da8ee;"><strong>当我们在迭代数组元素的时候不关心数组的索引的时,首选使用foreach</strong></span>。当然咯,foreach远远没有本篇博客讲解的这么简单,星仔到时候带着大家在集合框架篇的时候再深入讲解foreach。</p><p style="text-align:center;"><img alt="" src="https://img.php.cn/upload/article/000/000/067/b9c206b202be8e9cc09cbc7b102a4161-37.png"></p><h2 id="5.2%20%E6%96%B9%E6%B3%95%E7%9A%84%E5%8F%AF%E5%8F%98%E5%8F%82%E6%95%B0">5.2 方法的可变参数</h2><p><strong>Java5的时候为什么要增加可变参数呢?我们来看一下以下的需求</strong></p><p>需求:编写一个方法,统计使用数组传递过来的总和。</p><p><img alt="" src="https://img.php.cn/upload/article/000/000/067/0ab0ceca8f5fec17090a4aca68d9e560-39.png"></p><p><strong>虽然说也是可以实现,但是我们心里肯定是不爽的,主要在于以下几点:</strong></p>
  • 为了求多个数之和,我们还得先创建一个数组来存储数据。
  • 如果多个数是变化的,比如求3个数之和变成求5个数之和.......,还得去修改定义数组,但是数组是定长的。

那如果要解决该问题该怎么办呢?这个时候就需要引入Java5的另一个新特性:方法的可变参数(说的是参数的个数可变)

注意:

  • 方法的可变参数其实也是一个语法糖,是编译器级别的新特性。主要是为了让开发者写代码更简单。
  • 方法的可变参数其底层是就是一个数组类型
  • 可变参数必须作为方法的最后一个参数,避免参数的歧义性。
  • 一个方法最多只有一个可变参数

六、数组元素拷贝

数组拷贝:从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

  • 从 src 引用的源数组到 dest 引用的目标数组,数组组件的一个子序列被复制下来。
  • 被复制的组件的编号等于 length 参数。
  • 源数组中位置在 srcPos 到 srcPos+length-1 之间的组件被分别复制到目标数组中的 destPos 到 destPos+length-1 位置。

数组拷贝操作是经常使用到的,SUN就直接把数组的拷贝操作存放在JDK中的System类中

Object:Java语言中的根类。是所有类的老祖宗。Object可以表示任意数据类型。

该方法没有方法体,该方法使用了native修饰符(本地方法)。该方法底层使用了C/C++语言实现了,Java直接调用其他语言编写好的功能

arraycopy 方法使用方式

System.arraycopy(src, 2, dest, 5, 4);

查阅API文档了(Java的帮助文档/好比字典),在什么类中有什么功能的方法即可。文档在手,天下我有!

推荐学习:《java学习教程

初期値

##byte、short、int

##長い

フロート

##double

##0.0D

##ブール値

false

char

'\ u0000' (空を意味します)

参照データ型

null

以上がJava 学習の概要の配列 (整理および共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。