Java基礎之數組詳解
前言
我們瞭解數組這個概念之前,我們先思考下面幾個問題。
如果我們需要兩個數據,那麼直接創建兩個變量即可
int a; int b;
如果需要五個數據,那麼可以創建五個變量
int a; int b; int c; int d; int f;
但如果我們需要100個甚至是1萬個數據,那麼我們創一萬個變量?顯然這是不現實的。這個時候就需要我們的數組來起作用!幫我們“批量”創建變量。
由上可以得出:數組的本質就是讓我們能“批量”創建相同類型的變量!
一.數組的概念
數組是一種數據結構,用來存儲同一類型的集合,也就是說數組包含的變量必須是相同類型!
二.創建數組
基本語法如下:
//動態初始化 數據類型[] 數組名稱 = new 數據類型 []{初始化數據}; //靜態初始化 數據類型[] 數組名稱 = {初始化數據};
代碼示例
public class TestDemo { public static void main(String[] args) { //動態初始化 //數據類型[] 數組名稱 = new 數據類型 []{初始化數據}; int[] arr1 = new int[]{1,2,3}; //靜態初始化 //數據類型[] 數組名稱 = {初始化數據}; int[] arr2 ={1,2,3}; } }
註意:靜態初始化的時候,數組元素的個數和初始化數據的格式是一樣的!
如果你學過其他語言,例如C語言,c語言的數組創建是這樣的
數據類型 數組名[]={初始化數據}; 例如: int arr[] = {1,2,3};
其實Java中也可以做到這樣,但是不推薦這麼寫,Java是一種強類型語言,變量前面就是類型,一目瞭然!
三.數組的使用
我們看一個例子,如何獲取數組的長度?
如果你學過C語言,那麼肯定會說
int sz = sizeof(arr) / sizeof(arr[0]);
其實Java比c語言更方便,直接使用“數組名.length”就可以求出來數組的長度。
代碼如下:
public class TestDemo { public static void main(String[] args) { int[] arr ={1,2,3}; int len = arr.length; System.out.println(len);//3 } }
毫無疑問這個代碼運行結果是3;
那麼我們如何訪問數組元素呢?
我們來看下面的代碼:
public class TestDemo { public static void main(String[] args) { int[] arr ={1,2,3}; int len = arr.length; System.out.println(len);//3 System.out.println(arr[0]);//1 System.out.println(arr[1]);//2 System.out.println(arr[2]);//3 } }
顯而易見的是,直接使用數組名[數組元素下標]來訪問數組元素。但出現瞭一個問題,為什麼arr[0]是1而arr[1]是2?為什麼不是arr[1]是1 arr[2]是2嗎?
這裡我們得出一個結論,數組的下標是從0開始的,不是從1開始的。
我們來嘗試訪問一下arr[3]看會出現什麼情況.
public class TestDemo { public static void main(String[] args) { int[] arr ={1,2,3}; int len = arr.length; System.out.println(len);//3 System.out.println(arr[0]);//1 System.out.println(arr[1]);//2 System.out.println(arr[2]);//3 System.out.println(arr[3]); } }
我們發現前面都和我們預想一樣輸出結果都正確,但唯獨出現瞭一串紅字,這串紅字說明存在數組越界。
我們由此得出一個結論:在Java下標訪問操作中不能超出有效范圍也就是[0,length-1],如果超出有效范圍,會拋出下標越界異常。
四.數組的遍歷
所謂遍歷,是指將數組中的所有元素都訪問一遍,不重不漏,需要搭配循環語句!
我們學瞭數組的訪問,那麼我們如何遍歷數組呢?有兩種常用方法 一種是for循環,一種是foreach循環。
for循環示例
public class TestDemo { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; for(int i = 0 ;i < arr.length;i++){ System.out.print(arr[i]+" "); } } }
我們發現打印出來瞭數組的元素。
for-each示例
foreach基本使用方法:元素類型 變量:數組名
public class TestDemo { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; for(int x:arr){ System.out.print(x+" "); } } }
執行結果一致。
那麼我們什麼時候使用for循環,什麼時候使用foreach循環?
foreach循環適用於不知道循環次數,或者是循環次數很難計算。
for循環適用於知道循環次數,在復雜的循環中效率更高。
如果是在循環中使用增刪查改操作,for循環可以實現,因為foreach循環不能實現這些操作。
五.數組作為方法的參數
基本用法:
1.打印數組內容
代碼示例:
public class TestDemo { public static void printArray(int[] arr){ for(int x:arr){ System.out.print(x+" "); } } public static void main(String[] args) { int[] arr = {2,3,4,5,6}; printArray(arr); } }
2.求數組元素的和
public class TestDemo { public static int sum(int []arr) { int sum = 0;//一定要初始化為0,不然是隨機值 for (int i = 0; i < arr.length; i++) { sum += arr[i]; } return sum; } public static void main(String[] args) { int[] arr = {1,2,3,4,5}; int ret = sum(arr); System.out.println(ret); } }
3.數組每個元素乘2輸出
public class TestDemo { public static void multiplication(int[] arr){ for(int i = 0 ;i < arr.length;i++){ arr[i]=arr[i]*2; } } public static void printArray(int[] arr){ for(int x:arr){ System.out.print(x+" "); } } public static void main(String[] args) { int [] arr = {1,2,3,4}; System.out.println("乘2前:"); printArray(arr); System.out.println(); System.out.println("乘2後:"); multiplication(arr); printArray(arr); } }
六.數組相關方法Arrays
Arrays是操作Java數組的工具類。
如果要對數組做什麼事情,可以通過它來做,當然,有些事情是它做不瞭的,但是隻要它能做到,我們調用它就OK。
1.數組轉字符串:使用Arrays.toString();
import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int[] arr= {1,2,3,4,5,6}; String arr1 = Arrays.toString(arr); System.out.println(arr1); } }
這個方法打印出來是以字符串形式打印,把我們要打印的數組,放到toString裡面,那麼就會幫我們把當前數組,轉變為字符串進行輸出
2.數組拷貝
如何將數組拷貝?最直觀的方法是創建一個與當前數組大小相同,類型相同的數組,使用循環一個一個賦值。但Java中存在一些方法可以直接拷貝。
使用Arrays.copyOf(數組名,數組的長度);
import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int[] arr1 ={1,2,3,4,5,6}; int[] arr2 = Arrays.copyOf(arr1,arr1.length); System.out.println("拷貝的數組元素為:"+Arrays.toString(arr2)); } }
范圍拷貝使用Arrays.copyOfRange(數組名,從開始下標,到結束下標)
import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int[] arr1 = {1,2,3,4,5,6}; int[] arr2 = Arrays.copyOfRange(arr1,1,3); System.out.println("范圍拷貝的數組內容為:"+Arrays.toString(arr2)); } }
註意:copyOfRange函數中,數組元素依然是從下標為0開始,且最後一個參數是取不到的,也就是說是取[1,3)左閉右開的元素。
3.數組排序
如果你學過C++,那麼一定會對sort函數很熟悉,C++中sort函數使用代碼示例如下
#include <iostream> #include <algorithm> using namespace std; const int N = 100; int main() { int arr[N]; int n = 0; cin >> n; for (int i = 0; i < n; i++) { cin >> arr[i]; } sort(arr,arr+n); for (int i = 0; i < n; i++) { cout << arr[i] << ' '; } return 0; }
而Java中也存在這樣的函數:Arrays.sort
import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int[] arr = {5,4,3,2,1}; Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } }
我們可以看到,sort函數均是以升序排列。
4.數組查找
①.順序查找:
public class TestDemo { public static int find(int[] arr,int x){ for(int i = 0;i<arr.length;i++){ if(arr[i]==x) return i; } return -1;//表示沒有找到 } public static void main(String[] args) { int [] arr = {1,2,3,4,5}; System.out.println(find(arr,10)); } }
②.二分查找
手動實現:
public class TestDemo { public static int binarySearch(int [] arr,int x){ int left = 0; int right = arr.length-1; while(left<=right){ int mid = left+right>>1; if(x<arr[mid]){ //表示在左邊 right=mid-1; } else if(x>arr[mid]){ //表示在右邊 left = mid + 1; } else { //相等說明找到 return mid; } } return -1;//循環結束,說明沒找到; } public static void main(String[] args) { int [] arr = {1,2,3,4,5}; System.out.println(binarySearch(arr,4)); } }
但Java中 這個方法以及被封裝好瞭 我們可以使用Arrays.binarySearch(數組名,要找的元素);來實現
import java.util.Arrays; public class TestDemo { public static void main(String[] args) { int [] arr = {1,2,3,4,5}; System.out.println(Arrays.binarySearch(arr,4)); } }
以上就是Java的數組講解,感謝觀看。
到此這篇關於Java基礎之數組詳解的文章就介紹到這瞭,更多相關java數組詳解內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- None Found