日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java学习笔记(九)--数组及Arrays类

發布時間:2025/3/21 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java学习笔记(九)--数组及Arrays类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數組

數組是最為常見的一種數據結構,是相同類型的、用一個標識符封裝到一起的基本類型數據序列或對象序列。

數組是具有相同數據類型的一組數據的集合。就是說數組中的每個元素具有相同的數據類型。在Java中將數組看作一個對象。

一、一維數組

1.1 創建一維數組

數組作為對象允許使用 new 關鍵字進行內存分配。在使用數組之前,必須首先定義數組變量所屬的類型。一維數組的創建有兩種形式。

1、先聲明,在用 new 運算符進行內存分配

聲明以為數組有下列兩種方式:

數組元素類型 數組名[]; 數組元素類型[] 數組名;

數組元素類型決定了數組的數據類型。它可以是Java中任意的數據類型,包括簡單類型和組合類型。數組名是一個合法的標識符,符號 " [] " 指明該變量是一個數組類型變量。單個 “ [ ] ” 表示要創建的數組是一個一維數組。

聲明數組后,還不能立即訪問它的任何元素,因為聲明數組只給出了數組名和元素的數據類型,使用數組還要為它分配內存空間。在為數組分配內存空間時必須指明數組的長度。為數組分配內存空間的語法格式如下:

數組名 = new 數組元素的類型[數組元素的個數];

數組名,即被連接到數組變量的名字。數組元素的個數,即指定數組中變量的個數,也就是數組的長度。

數組通過下標來區分數組中不同的元素。數組的下標是從0開始的。使用 new 關鍵字為數組分配內存時,整形數組中各個元素的初始值都為0。

2、聲明數組的同時為數組分配內存

這種方法是將數組的聲明和內存分配合在一起執行:

數組元素的類型[] 數組名字 = new 數組元素的類型[數組元素的個數]; 數組元素的類型 數組名字[] = new 數組元素的類型[數組元素的個數];

例:以上面幾種方式聲明兩個個長度為5的整型數組,并打印其初始值。

//先聲明后分配內存 int[] array1,array2; //同時聲明兩個數組 //相當于 int array1[],array2[]; array1 = new int[5]; //分配內存空間/*聲明數組的同時為數組分配內存 int[] array1 = new int[5]; int array2[] = new int[5]; */ //for循環語句打印數組元素 for(int i = 0; i < 5; i++)System.out.println(array1[i]);//使用for each 循環語句打印元素 for(int x : array2)System.out.println(x);

1.2 初始化一維數組

數組的初始化可分別初始化數組中的每個元素。創建并初始化數組有以下兩種形式:

//一種初始化方式 int[] arr; //聲明 int arr = new int[]{1,2,3,4,5};//初始化//第二種初始化方式 int arr1[] = {1,2,3,4};//創建并初始化 //int[] arr1 = {1,2,3,4}

數組的初始化就是包括在大括號之內用逗號分開的表達式列表。用逗號分隔數組中的各元素,系統會自動為數組分配一定的空間。數組的大小就是初始值的個數。

數組初始化不能定義數組的長度,否則編譯器會報錯。

第一種方式可以在不創建新變量的情況下重新初始化一個數組。

int arr[]; int arr = new int[]{1,2,3,4,5};//初始化 int arr = new int[]{6,7,8,9,10};//重新初始化 /*相當于以下語句的簡寫 int arr[]; int arr = new int[]{1,2,3,4,5}; //初始化 int arr1[] = {6,7,8,9,10};//創建并初始化數組arr1 arr = arr1; */

在Java中允許數組的長度為0.在編寫一個結果為數組的方法時,如果結果為空,則這種語法就顯得非常有用。此時可以創建一個長度為0的數組:new 元素類型[0]。注意,數組長度為0與null不同。

1.3 使用一維數組

數組元素的訪問可以通過下標訪問。其范圍從0~(數組長度-1)。

數組名[下標表達式];

下標表達式可以是一個整型常量,也可以是值為整型常量的表達式。

處理數組元素時,經常會用到for循環。Java中簡便的for循環(foreach循環),可以不使用下標變量就可以順序的遍歷整個數組。

int[] arr = new int[]{1,2,3,4,5};//創建并初始化 arr[0] = 10;//訪問arr數組的第一個元素并新賦值為10 //for循環語句打印數組元素 for(int i = 0; i < 5; i++)System.out.println(arr[i]);//使用for each 循環語句打印元素 for(int x : arr)System.out.println(x);

1.4 數組拷貝

在Java中,允許將一個數組變量拷貝給另一個數組變量,這是兩個變量將引用同一個數組:

int arr[]; int arr1[] = {6,7,8,9,10};//創建并初始化數組arr1 arr = arr1; arr[4] = 12; //此時arr1[4]也變成了12 arr1[1] = 20;//此時arr[1]也變成了20

此方法不能將arr1引用的數組內容復制給arr,而是將arr1的引用值復制給了arr。它倆都指向同一個數組。

將一個數組的所有值拷貝到一個新數組中去,就要使用 Array 類的 copyOf() 方法:

int[] arr2 = Arrays.copyOf(arr1, arr1.length);

第一個參數是要拷貝的數組名;第二個參數是新素組的長度,常用來改變數組的大小。

如果數組元素是數值型,那么多余的元素將被賦值為0;如果數組元素是布爾型,則將賦值為false。相反,新數組的長度小于原始數組的長度,則只拷貝最前面的數據元素。

二、二維數組

如果一維數組中的各個元素仍然是一個數組,那么它就是一個二維數組。

2.1 二維數組的創建

下面是聲明二維數組的語法:

數據類型[][] 數組名; 或者 數據類型 數組名[][];

對于高維數組,有兩種為數組分配內存的方式。

(1)、直接為每一維分配內存空間

int[][] arr; arr = new int[3][3];

(2)、分別為每一維分配內存

int[][] arr; arr = new int[3][]; arr[0] = new int[3]; arr[1] = new int[3]; arr[2] = new int[3];

2.2 二維數組初始化

數據類型 數組名[][] = {value1,value2,...,valuen}; int[][] array = {{0,1},{9,2}}

2.3 使用二維數組

多維數組的引用方式為:

arrayName[index1][index2];

二維數組中使用兩個下標,一個表示行,另一個表示列。

例:在項目中創建類Matrix,在主方法中實現輸出一個3行3列且所有元素為0的矩陣。

public class Matrix {public static void main(String[] args) {int[][] arr;arr = new int[3][3];for(int i = 0; i < arr.length; i++){for(int j = 0; j < arr[i].length; j++){System.out.printf("%d ",arr[i][j]);}System.out.printf("\n");}}} /*輸出結果為 0 0 0 0 0 0 0 0 0 */

多維數組的創建方法與二維數組相似。

三、數組的基本操作

3.1 遍歷數組

遍歷數組就是獲取數組中的每個元素。遍歷數組一般使用for循環來實現。遍歷一維數組很簡單,遍歷二維數組需要使用雙層for循環,通過數組的length屬性可以獲得數組的長度。

例:在項目中創建類Matrix,在主方法中實現遍歷輸出一個3行3列且所有元素為0的矩陣。

第一種方式如上,現在我們使用for each循環語句遍歷二維數組。

public class Matrix {public static void main(String[] args) {int[][] arr;arr = new int[3][3];for(int x[] : arr){for(int y : x){System.out.printf("%d ",y);}System.out.printf("\n");}}} /*輸出結果為 0 0 0 0 0 0 0 0 0 */

3.2填充替換數組元素

數組中的元素定義完成后,可以通過Arrays類的靜態方法fill()來對數組中的元素進行替換。下面以int型數組為例:

1、fill(int[] a, int value)

該方法可以將指定的int值分配給int型數組的每個元素。

Arrays.fill(int[] a, int value);
  • a:要進行元素替換的數組。
  • value:要存儲數組中所有元素的值。
import java.util.Arrays; public class First {public static void main(String[] args) {int[] arr;arr = new int[4];Arrays.fill(arr, 2);for(int i = 0; i < arr.length; i++){System.out.printf("%d ",arr[i]);}}} /*輸出結果 2 2 2 2 */

2、fill(int [] a, int fromIndex, int toIndex, int value)

該方法將指定的int值分配給int型數組指定范圍中的每個元素。填充范圍從索引 fromIndex(包含)一直到索引 toIndex(不包含)。如果 fromIndex == toIndex,則填充范圍為空。

Arrays.fill(int [] a, int fromIndex, int toIndex, int value)
  • a:要進行填充的數組;
  • fromIndex:要使用指定值填充的第一個元素索引(包括);
  • toIndex:要使用指定值填充的最后一個元素的索引(不包括);
  • value:要存儲在數組所有元素中的值。
import java.util.Arrays; public class First {public static void main(String[] args) {int[] arr;arr = new int[4];Arrays.fill(arr, 1,4,5);for(int i = 0; i < arr.length; i++){System.out.printf("%d ",arr[i]);}}} /*輸出結果 0 5 5 5 */

3.3 對數組進行排序

通過Arrays類的靜態sort()方法可以實現對數組的排序。sort() 方法提供了多種重載方式,可對任意類型的數組進行升序排序。

Arrays.sort(object);

object是指進行排序的數組名稱。

import java.util.Arrays; public class First {public static void main(String[] args) {int[] arr;arr = new int[]{23,42,12,8,20};Arrays.sort(arr);for(int i = 0; i < arr.length; i++){System.out.printf("%d ",arr[i]);}}} /*運行結果 8 12 20 23 42 */

Java中String類型數組的排序算法是根據字典編排順序排序的,因此數字排在字母前面,大寫字母排在小寫字母前面。

3.4 復制數組

Arrays 類的 copyOf() 方法和 copyOfRange() 方法可以實現對數組的復制。

1、copyOf() 方法

copyOf() 方法是復制一個數組至指定長度的數組。

數據類型 數組名[] = Arrays.copyOf(arr, newlength);
  • arr:要復制的數組;
  • newlength:int型常量,指復制后的新數組的長度。如果新數組的長度大于數組arr的長度,則根據復制數組的類型來決定填充的值,整型數組用0填充,char型數組則使用null來填充;如果復制后的數組長度小于數組arr的長度,則會從數組arr的第一個元素開始截取至滿足新數組長度為止。
import java.util.Arrays; public class First {public static void main(String[] args) {int[] arr;arr = new int[]{23,42,12,8,20};int[] newarr = Arrays.copyOf(arr, 7);for(int i = 0; i < newarr.length; i++){System.out.printf("%d ",newarr[i]);}}} /*運行結果 23 42 12 8 20 0 0 */

2、copyOfRange() 方法

copyOfRange() 方法將指定數組的指定長度復制到一個新數組中。

copyOfRange(arr, int fromIndex, int toIndex)
  • arr:要進行復制的數組對象;
  • fromIndex:指定開始復制數組的索引位置。fromIndex 必須在0至整個數組長度之間。新數組包括索引是 fromIndex 的元素。
  • toIndex:要復制范圍的最后索引位置。可大于數組arr的長度。新數組不包括索引是toIndex的元素。
import java.util.Arrays; public class First {public static void main(String[] args) {int[] arr;arr = new int[]{23,42,12,8,20};int[] newarr = Arrays.copyOfRange(arr, 3,7);for(int i = 0; i < newarr.length; i++){System.out.printf("%d ",newarr[i]);}}} /*運行結果 8 20 0 0 */

toIndex大于數組arr的長度,根據復制數組的類型來決定填充的值,整型數組用0填充,char型數組則使用null來填充;

新數組的長度等于toIndex 減去 fromIndex的值。

3.5 數組查詢

Arrays 類的 binarySearch()方法,可使用二分法來搜索指定數組,以獲得指定對象。該方法返回要搜索元素的索引值。數組在調用此方法前必須排序好的。

1、binarySearch(Object[] a, Object key)

binarySearch(Object[] a, Object key)
  • a:要搜索的數組;
  • key:要搜索的值。
  • 如果key包含在數組中,則返回搜索值的索引;否則返回“-x”。x是第一個大于key的元素索引值。如果key大于數組中的所有元素,x為a.length+1。
import java.util.Arrays; public class First {public static void main(String[] args) {int[] arr;arr = new int[]{23,42,12,8,20};Arrays.sort(arr);int index = Arrays.binarySearch(arr, 13);for(int i = 0; i < arr.length; i++){System.out.printf("%d ",arr[i]);}System.out.println(); //換行System.out.println(index);}} /*輸出結果 8 12 20 23 42 -3 */

2、binarySearch(Object[] a, int fromIndex, int toIndex, Object key)

binarySearch(Object[] a, int fromIndex, int toIndex, Object key)
  • a:要搜索的數組;
  • fromIndex:指定范圍的開始處索引(包含);
  • toIndex:指定范圍的結束處索引(不包含);
  • key:要搜索的值。
  • 如果key包含在數組中,則返回搜索值的索引;否則返回“-x”。x是第一個大于key的元素索引值。如果key大于數組中的所有元素,x為toIndex+1。
import java.util.Arrays; public class First {public static void main(String[] args) {int[] arr;arr = new int[]{23,42,12,8,20};Arrays.sort(arr);int index = Arrays.binarySearch(arr, 1, 3, 50);for(int i = 0; i < arr.length; i++){System.out.printf("%d ",arr[i]);}System.out.println(); //換行System.out.println(index);}} /*輸出結果 8 12 20 23 42 -4 */

總結

以上是生活随笔為你收集整理的Java学习笔记(九)--数组及Arrays类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。