Java數(shù)組的定義與使用
一.一維數(shù)組的定義
1.創(chuàng)建數(shù)組
數(shù)組定義有三種方法:
int[] array1 = new int[10];//前面的int[]為數(shù)組的類型,后面的int[10]為其能夠存放的大小,array1為其數(shù)組名稱
int[] array2 = {1,2,3,4,5};
int[] array3 = new int[]{1,2,3,4,5};2.初始化數(shù)組
初始化數(shù)組有動態(tài)初始化和靜態(tài)初始化兩種
動態(tài)初始化:在創(chuàng)建數(shù)組時,只定義數(shù)組中元素的個數(shù),并未給里面的元素進行賦值
例如:
int [] array = new int [ 10 ];
靜態(tài)初始化:在創(chuàng)建數(shù)組時不定義數(shù)據(jù)元素個數(shù),而直接將數(shù)組里的數(shù)據(jù)內(nèi)容進行賦值,編譯器會自己判定數(shù)組有幾個元素, 后面的數(shù)據(jù)必須與前面定義的數(shù)據(jù)類型一致
例如:
int[] array1 = {0,1,2,3,4,5,6,7,8,9};
初始化能分為兩步,分步的第二步中new int[]不能省略
int [] array ;
array = new int []{ 10 , 20 , 30 };
當數(shù)組中的元素為動態(tài)初始化時,會有對應的默認值

二.數(shù)組的使用
1.訪問數(shù)組
通過數(shù)組的下標進行訪問,數(shù)組在內(nèi)存中是一塊連續(xù)的內(nèi)存空間
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
System.out.println(array[3]);
}
}數(shù)組的下標是從0開始的,所以數(shù)組用下標訪問最大能到數(shù)組長度-1
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
System.out.println(array[5]);
}
}超過會報異常

2.遍歷數(shù)組
數(shù)組有3種打印方式
(1)for循環(huán)打印數(shù)組
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}(2)foreach打印數(shù)組
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
for (int x:array) {
System.out.print(x+" ");
}
}
}(3)toString打印數(shù)組
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
System.out.println(Arrays.toString(array));//使用toString方法需要導包,類似C語言中的頭文件
}
}運行結果:

3.修改數(shù)據(jù)內(nèi)容
1.直接傳變量
public class Test {
public static void func(int x){
x = 10;
System.out.println("x:"+x);
}
public static void main(String[] args) {
int num = 0;
func(num);
System.out.println("num:"+num);
}
}運行結果:

num的值沒有被修改為10,因為方法傳參的時候傳的是形參,形參相當于是實參的一份臨時拷貝,形參的修改不會影響到實參(相當于調(diào)用方法時創(chuàng)建的棧幀里有一個變量的值為0,然后被修改為10,方法調(diào)用結束,創(chuàng)建的棧幀銷毀,并無影響)
2.傳的是數(shù)組
import java.util.Arrays;
public class Test {
public static void func(int[] array){
array[0] = 10;
}
public static void main(String[] args) {
int[] array = {1,2,3};
func(array);
System.out.println(Arrays.toString(array));
}
}運行結果:

3.傳的數(shù)組返回的也是數(shù)組
import java.util.Arrays;
public class Test {
public static int[] func(int[] array){
array[0] = 10;
array[2] = 30;
return array;
}
public static void main(String[] args) {
int[] array = {1,2,3};
func(array);
System.out.println(Arrays.toString(array));
}
}運行結果:

三.有關數(shù)組方法的使用
1.toString
toString方法的作用是將數(shù)組的數(shù)據(jù)變成字符串類型數(shù)據(jù)
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};//定義一個數(shù)組
String arrays = Arrays.toString(array);//用字符串類型接受方法的返回值
System.out.println(arrays);
}
}運行結果:

模擬實現(xiàn)toString
public class Test {
public static String toString(int[] array){//返回類型為字符串類型
String array1 = "[";//定義一個字符串類型數(shù)據(jù)
for (int i = 0; i < array.length; i++) {
array1+=array[i];
if(i!= array.length-1){
array1+=",";
}
}
array1+="]";
return array1;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5};//定義一個數(shù)組
String arrays = toString(array);//用字符串類型接收方法的返回值
System.out.println(arrays);
}
}運行結果:

2. copyOf

第一個參數(shù)original- 要復制的數(shù)組
第二個參數(shù)newLength- 要返回的副本的長度
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
int[] newArray = new int[array.length];//新數(shù)組
newArray = Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(newArray));
}
}運行結果:

模擬實現(xiàn)copyOf
import java.util.Arrays;
public class Test {
public static int[] copyOf(int[] array,int length){
int[] newArray = new int[array.length];
for (int i = 0; i < array.length; i++) {//循環(huán)賦值
newArray[i] = array[i];
}
return newArray;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
int[] newArray = copyOf(array, array.length);
newArray[2] = 30;//將拷貝好的數(shù)組的第3個元素賦值為30,觀察該改變是否對原數(shù)組是否有影響
System.out.println("array:"+Arrays.toString(array));
System.out.println("newArray:"+Arrays.toString(newArray));
}
}運行結果:

四.查找數(shù)組中的元素
1.順序查
public class Test {
public static int find(int[] array,int k){
for (int i = 0; i < array.length; i++) {
if(k == array[i]){
return i;//找到了就返回下標
}
}
return -1;//找不到返回-1
}
public static void main(String[] args) {
int[] array = {1,2,3,0,7,8,9,4,5,6};
int ret = find(array,4);
System.out.println(ret);
}
}運行結果:

2.二分查找binarySearch
二分查找必須是有序數(shù)組
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9,10};
int ret = Arrays.binarySearch(array,4);
System.out.println(ret);
}
}運行結果:

模擬實現(xiàn)binarySearch

a- 要搜索的數(shù)組
key- 要搜索的值
public class Test {
public static int binarySearch(int[] array,int k){
int left = 0;
int right = array.length-1;
while(left<=right){
int mid = (left+right)/2;
if(array[mid]>k){//查找范圍左移
right = mid-1;
}else if(array[mid]<k){//查找范圍右移
left = mid+1;
}else{
return mid;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6,7,8,9,10};
int ret = binarySearch(array,4);
System.out.println(ret);
}五.數(shù)組排序
1.冒泡排序
import java.util.Arrays;
public class Test {
public static void bubbleSort(int[] array){
for (int i = 0; i < array.length-1; i++) {
boolean flag = true;
for (int j = 0; j < array.length-1-i; j++) {
if(array[j]>array[j+1]){
int tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
flag = false;
}
}
if(flag == true){//已經(jīng)有序
break;
}
}
}
public static void main(String[] args) {
int[] array = {1,2,3,6,5,0,4,8,7,9};
bubbleSort(array);
System.out.println(Arrays.toString(array));
}運行結果:

2.排序方法sort
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3,6,5,0,4,8,7,9};
Arrays.sort(array);
System.out.println(Arrays.toString(array));
}
}運行結果:

六.數(shù)組逆置
import java.util.Arrays;
public class Test {
public static void reverse(int[] array){
int head = 0;
int tail = array.length-1;
while(head<tail){
int tmp = array[head];
array[head] = array[tail];
array[tail] = tmp;
head++;//后移
tail--;//前移
}
}
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6};
reverse(array);
System.out.println(Arrays.toString(array));
}運行結果:

七.二維數(shù)組的定義
二維數(shù)組同樣有三種定義方式
public class Test {
public static void main(String[] args) {
int[][] array1 = {{1,2,3},{4,5,6}};
int[][] array2 = new int[2][3];
int[][] array3 = new int[][]{{1,2,3},{4,5,6}};
}八.二維數(shù)組的打印
Arrays包里面的toString方法是將數(shù)組中的元素轉換為字符串,用2個toString方法來打印二維數(shù)組時,第一個toString已經(jīng)將數(shù)組轉換為字符串,第二個toString是不能接收字符串的,所以不能用toString來打印二維數(shù)組
應用deepToString來打印
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[][] array = {{1,2,3},{4,5,6}};
System.out.println(Arrays.deepToString(array));
}運行結果:

到此這篇關于Java數(shù)組的定義與使用的文章就介紹到這了,更多相關Java數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot JPA懶加載失效的解決方案(親測有效)
這篇文章主要介紹了SpringBoot JPA懶加載失效的解決方案(親測有效),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
JetBrains?發(fā)布下一代?IDE無比輕量幾秒就能啟動干活
雖然?JetBrains?公司說?Fleet?的定位和目標并不是代替其他?IDE,但個人覺得,?如果?Fleet?火起來了,其他?IDE?就會黯然失色,特別是多語言開發(fā)者,誰愿意裝多個?IDE?呢?到時候,可能?JetBrains?以后的所有?IDE?要一統(tǒng)江湖了2021-12-12
Springboot jar文件如何打包zip在linux環(huán)境運行
這篇文章主要介紹了Springboot jar文件如何打包zip在linux環(huán)境運行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-02-02

