常用的對數(shù)組進(jìn)行的操作
1、求數(shù)組中最大值,最小值
思路:假設(shè)下標(biāo)為0的元素是最大值,遍歷數(shù)組,依次跟max進(jìn)行比較,如果有元素比這個(gè)max還大,則把這個(gè)值賦給max。最小值同樣
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class TestArray{ public static void main(String[] args){ int [] arr={ 23 , 45 , 234 , 576 , 34 , 87 , 34 , 12 , 67 }; int max=arr[ 0 ]; int min=arr[ 0 ]; for ( int i= 0 ;i<arr.length;i++){ if (arr[i]>max){ max=arr[i]; } if (arr[i]<min){ min=arr[i]; } } System.out.println( "數(shù)組中最大值為:" +max); System.out.println( "數(shù)組中最小值為:" +min); } } |
2、查找數(shù)組中是否存在某個(gè)元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.Scanner; public class TestArray{ public static void main(String[] args){ Scanner in= new Scanner(System.in); int [] arr={ 23 , 45 , 234 , 576 , 34 , 87 , 34 , 12 , 67 }; System.out.println( "請輸入你要查找的元素" ); int element=in.nextInt(); int i,flag= 0 ; for (i= 0 ;i<arr.length;i++){ if (arr[i]==element){ flag= 1 ; break ; } } if (flag== 1 ){ System.out.println( "你要查找的元素的下標(biāo)為:" +i); } else { System.out.println( "你要查找的元素不存在" ); } } } |
(2)、用二分查找法查找數(shù)組中是否存在某個(gè)元素
前提:待查找的數(shù)組必須是有序的(大小有序)
原理:將待查找的元素與數(shù)組中中間下標(biāo)的元素進(jìn)行比較,如果大于中間元素,去右邊查找,小于中間元素,去左邊查找。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public static int binarySearch( int [] arr, int ele){ int left= 0 ; int right=arr.length- 1 ; int mid; int index=- 1 ; while (left<=right){ mid=(left+right)/ 2 ; if (arr[mid]==ele){ index=mid; break ; } else if (arr[mid]<ele){ left=mid+ 1 ; } else if (arr[mid]>ele){ right=mid- 1 ; } } return index; } |
3、對數(shù)組進(jìn)行排序
(1)、冒泡排序
原理:相鄰元素進(jìn)行比較,小的往前趕,大的往后冒,最大值出現(xiàn)的最大索引處
分析:第一次進(jìn)行比較,大的往后冒,會(huì)把最大值排在最大索引處
第二次進(jìn)行比較,因?yàn)樽畲笾狄呀?jīng)確定了,只需要比較前n-1個(gè)元素即可,確定一個(gè)第二大值排在第二大索引處
依次確定第三大值,第四大值.............
結(jié)論:N個(gè)數(shù)字來排隊(duì),兩兩比較小靠前,外層循環(huán)n-1,內(nèi)層循環(huán)n-1-i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class TestArray{ public static void main(String[] args){ int [] arr={ 10 , 3 , 8 , 1 , 6 }; //外層循環(huán)控制比較輪數(shù) for ( int i= 0 ;i<arr.length- 1 ;i++){ //內(nèi)層循環(huán)控制每輪比較次數(shù) for ( int j= 0 ;j<arr.length- 1 -i;j++){ if (arr[j]>arr[j+ 1 ]){ int temp=arr[j]; arr[j]=arr[j+ 1 ]; arr[j+ 1 ]=temp; } } } //遍歷數(shù)組 for ( int i= 0 ;i<arr.length;i++){ System.out.println(arr[i]); } } } |
(2)、選擇排序
原理:從下標(biāo)0處開始,依次和后邊的元素進(jìn)行比較,如果后面元素小于下標(biāo)0的元素,換位。拿新的下標(biāo)為0的元素和后邊的進(jìn)行比較。第一次完畢,最小值出現(xiàn)在索引0處
例:{10,3,8,1,6}
第一輪比較,從0下標(biāo)元素開始,依次和后邊的元素進(jìn)行比較,先是10和3進(jìn)行比較,10<3,交換位置,下標(biāo)0的元素變成3,{3,10,8,1,6};再拿3和8比較,3<8,不換位;3和1進(jìn)行比較,3>1,換位
{1,10,8,3,6},然后拿1和6進(jìn)行比較,1<6,不換位置。第一輪結(jié)束,{1,10,8,3,6}
第二輪比較,上一輪已經(jīng)確定了下標(biāo)0的元素為最小值,這輪比較從下標(biāo)1開始,先是10和8比較,換位{1,8,10,3,6};8和3比較,換位{1,3,10,8,6},3和6比較,不換位。第二輪結(jié)束,確定倒數(shù)第二小的元素在下標(biāo)1位置。
........
共比較length-1輪。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class TestArray{ public static void main(String[] args){ int [] arr={ 10 , 3 , 8 , 1 , 6 }; for ( int i= 0 ;i<arr.length- 1 ;i++){ for ( int j=i+ 1 ;j<arr.length;j++){ if (arr[i]>arr[j]){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } //遍歷數(shù)組 for ( int i= 0 ;i<arr.length;i++){ System.out.println(arr[i]); } } } |
4、刪除數(shù)組中元素
(1)根據(jù)下標(biāo)刪除元素(空位補(bǔ)0)
1
2
3
4
5
6
7
|
public static void delete( int [] arr, int index){ for ( int i=index;i<arr.length- 1 ;i++){ arr[i]=arr[i+ 1 ]; } arr[arr.length- 1 ]= 0 ; System.out.println(Arrays.toString(arr)); } |
(2)根據(jù)輸入的元素刪除數(shù)組中對應(yīng)的元素
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public static void delete( int [] arr, int ele){ int index=- 1 ; for ( int i= 0 ;i<arr.length;i++){ if (arr[i]==ele){ index=i; } } for ( int i=index;i<arr.length- 1 ;i++){ arr[i]=arr[i+ 1 ]; } arr[arr.length- 1 ]= 0 ; System.out.println(Arrays.toString(arr)); } |
下面介紹一些API里面常見的對數(shù)組的操作
在java中,除java.lang包下的類和接口可以直接使用外,其他包下的類或接口在使用時(shí)需要先導(dǎo)包。
java.util.Arrays類:此類包含用來操作數(shù)組(比如排序和搜索)的各種方法。
這些都是靜態(tài)方法,可以類名.方法名直接使用,這里都以int型數(shù)組為例
1、對數(shù)組進(jìn)行快速排序
Arrays.sort(int[] arr);對傳入的數(shù)組默認(rèn)進(jìn)行升序排序
2、返回指定數(shù)組內(nèi)容的字符串表現(xiàn)形式。
Arrays.toString(int[] arr);
3、使用二分法搜索制定數(shù)組中的某個(gè)元素的下標(biāo)
Arrays.binarySearch(int[] arr);
4、將將指定的 int 值分配給指定 int 型數(shù)組的每個(gè)元素。
Arrays.fill(int[] arr,int val);
5、復(fù)制指定的數(shù)組,截取或用 0 填充(如有必要),以使副本具有指定的長度。
Arrays.copyOf(int[] arr,int newLength);它的返回值是一個(gè)數(shù)組
6、將指定數(shù)組的指定范圍復(fù)制到一個(gè)新數(shù)組。 包含起始位置但不包含結(jié)束位置。
Arrays.copyOfRange(int[] arr,int from,int to);它的返回值是一個(gè)數(shù)組
其他數(shù)組知識:
1、命令行參數(shù):可以在執(zhí)行java命令時(shí)為main方法傳入?yún)?shù)值。
用法:運(yùn)行java命令時(shí)傳入命令行參數(shù): java 類名 "值1" "值2"...
public static void main(String[] args){},我們可以看到main方法是一個(gè)有參的方法,參數(shù)是一個(gè)字符串?dāng)?shù)組,在命令行為main方法傳值時(shí),傳入的值都保存在args字符數(shù)組里。
注意:多個(gè)參數(shù)值之間用空格分割。參數(shù)的值將會(huì)保存到字符串?dāng)?shù)組傳入main方法,下標(biāo)從零開始。
在獲取命令行參數(shù)時(shí)需要注意下標(biāo)不能越界,最大下標(biāo)應(yīng)該為參數(shù)的個(gè)數(shù)-1
1
2
3
4
5
|
public static void main(String[] args){ for ( int i= 0 ;i<args.length;i++){ System.out.println(args[i]); } } |
2、可變參數(shù)
可變參數(shù)是java1.5之后的新特性,可以代表零到多個(gè)相同數(shù)據(jù)類型的變量,是為了解決因參數(shù)個(gè)數(shù)的變化而導(dǎo)致過多的方法重載問題。
注意:
1、可變參數(shù)只能用于形式參數(shù)(方法定義時(shí)),可以把可變參數(shù)當(dāng)作數(shù)組來處理。
2、一個(gè)方法在最多只能有一個(gè)可變參數(shù),可變參數(shù)必須作為最后一個(gè)參數(shù)。
3、調(diào)用帶可變參數(shù)的方法時(shí),數(shù)據(jù)類型必須與可變參數(shù)的類型對應(yīng)。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class Test1 { public static void main(String[] args){ double sum=add( 4 , 2.1 , 3.4 , 1.2 ); System.out.println(sum); } public static double add( int a, double ...b){ double sum=a; for ( int i= 0 ;i<b.length;i++){ sum+=b[i]; } return sum; } } |
例題:
合并數(shù)組操作:現(xiàn)有如下一個(gè)數(shù)組: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} 要求將以上數(shù)組中值為0的項(xiàng)去掉,將不為0的值存入一個(gè)新的數(shù)組,生成的新數(shù)組為: int newArr [] ={1,3,4,5,6,6,5,4,7,6,7,5}
思路: 確定出不為0的個(gè)數(shù),這樣可以開辟新數(shù)組;從舊的數(shù)組之中,取出內(nèi)容,并將其賦給新開辟的數(shù)組。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public class Test1 { public static void main(String[] args){ int oldArr[]={ 1 , 3 , 4 , 5 , 0 , 0 , 6 , 6 , 0 , 5 , 4 , 7 , 6 , 7 , 0 , 5 }; int [] arr=mergeArrays(oldArr); System.out.println(Arrays.toString(arr)); } public static int [] mergeArrays( int [] oldArr){ int count= 0 ; for ( int i= 0 ;i<oldArr.length;i++){ if (oldArr[i]!= 0 ){ count++; } } int [] newArr= new int [count]; int index= 0 ; for ( int i= 0 ;i<oldArr.length;i++){ if (oldArr[i]!= 0 ){ newArr[index]=oldArr[i]; index++; } } return newArr; } } |
2、使用二分法查找有序數(shù)組中元素。找到返回索引,不存在輸出-1。使用遞歸實(shí)現(xiàn)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class Test1 { public static void main(String[] args){ int [] arr={ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 }; int index=binarySearch(arr, 6 , 0 ,arr.length- 1 ); System.out.println(index); } public static int binarySearch( int [] arr, int ele, int left, int right){ int mid=(left+right)/ 2 ; if (arr[mid]==ele){ return mid; } else if (arr[mid]<ele){ return binarySearch(arr,ele,mid+ 1 ,right); } else if (arr[mid]>ele){ return binarySearch(arr,ele,left,mid- 1 ); } return - 1 ; } } |
以上這篇java基礎(chǔ)之?dāng)?shù)組常用操作總結(jié)(必看篇)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。