常用的對數組進行的操作
常用的對陣列進行的運算
1、求數組中最大值,最小值
##想法:假設下標為0的元素是最大值,遍歷數組,依序跟max比較,如果有元素比這個max還大,則把這個值賦給max。最小值同樣
1 public class TestArray{ 2 public static void main(String[] args){ 3 int[] arr={23,45,234,576,34,87,34,12,67}; 4 int max=arr[0]; 5 int min=arr[0]; 6 for(int i=0;i<arr.length;i++){ 7 if(arr[i]>max){ 8 max=arr[i]; 9 }10 if(arr[i]<min){11 min=arr[i];12 }13 }14 System.out.println("数组中最大值为:"+max);15 System.out.println("数组中最小值为:"+min);16 }17 }
#2、尋找陣列中是否存在某個元素
1 import java.util.Scanner; 2 public class TestArray{ 3 public static void main(String[] args){ 4 Scanner in=new Scanner(System.in); 5 int[] arr={23,45,234,576,34,87,34,12,67}; 6 System.out.println("请输入你要查找的元素"); 7 int element=in.nextInt(); 8 int i,flag=0; 9 for(i=0;i<arr.length;i++){10 if(arr[i]==element){11 flag=1;12 break;13 }14 }15 if(flag==1){16 System.out.println("你要查找的元素的下标为:"+i);17 }else{18 System.out.println("你要查找的元素不存在");19 }20 }21 }
1 public static int binarySearch(int[] arr,int ele){ 2 int left=0; 3 int right=arr.length-1; 4 int mid; 5 int index=-1; 6 while(left<=right){ 7 mid=(left+right)/2; 8 if(arr[mid]==ele){ 9 index=mid;10 break;11 }else if(arr[mid]<ele){12 left=mid+1;13 }else if(arr[mid]>ele){14 right=mid-1;15 }16 }17 return index;18 }
3、對陣列進行排序
(1)、冒泡排序
原理:相鄰元素比較,小的往前趕,大的往後冒,最大值出現的最大索引處
分析:第一次比較,大的往後冒,會把最大值排在最大索引處
第二次進行比較,因為最大值已經確定了,只需要比較前n-1個元素即可,確定一個第二大值排在第二大索引處
依序確定第三大值,第四大值...... ....
結論:N個數字來排隊,兩兩比較小前,外層循環n-1,內層循環n-1-i
1 public class TestArray{ 2 public static void main(String[] args){ 3 int[] arr={10,3,8,1,6}; 4 //外层循环控制比较轮数 5 for(int i=0;i<arr.length-1;i++){ 6 //内层循环控制每轮比较次数 7 for(int j=0;j<arr.length-1-i;j++){ 8 if(arr[j]>arr[j+1]){ 9 int temp=arr[j];10 arr[j]=arr[j+1];11 arr[j+1]=temp;12 }13 }14 }15 //遍历数组16 for(int i=0;i<arr.length;i++){17 System.out.println(arr[i]);18 }19 }20 }
1 public class TestArray{ 2 public static void main(String[] args){ 3 int[] arr={10,3,8,1,6}; 4 for(int i=0;i<arr.length-1;i++){ 5 for(int j=i+1;j<arr.length;j++){ 6 if(arr[i]>arr[j]){ 7 int temp=arr[i]; 8 arr[i]=arr[j]; 9 arr[j]=temp;10 }11 }12 }13 //遍历数组14 for(int i=0;i<arr.length;i++){15 System.out.println(arr[i]);16 }17 }18 }
#4、刪除陣列中元素
( 1)根據下標刪除元素(空位補0)
1 public static void delete(int[] arr,int index){2 for(int i=index;i<arr.length-1;i++){3 arr[i]=arr[i+1];4 }5 arr[arr.length-1]=0;6 System.out.println(Arrays.toString(arr));7 }
(2)根據輸入的元素刪除陣列中對應的元素
1 public static void delete(int[] arr,int ele){ 2 int index=-1; 3 for(int i=0;i<arr.length;i++){ 4 if(arr[i]==ele){ 5 index=i; 6 } 7 } 8 for(int i=index;i<arr.length-1;i++){ 9 arr[i]=arr[i+1];10 }11 arr[arr.length-1]=0;12 System.out.println(Arrays.toString(arr));13 }
下面介绍一些API里面常见的对数组的操作
在java中,除java.lang包下的类和接口可以直接使用外,其他包下的类或接口在使用时需要先导包。
java.util.Arrays类:此类包含用来操作数组(比如排序和搜索)的各种方法。
这些都是静态方法,可以类名.方法名直接使用,这里都以int型数组为例
1、对数组进行快速排序
Arrays.sort(int[] arr);对传入的数组默认进行升序排序
2、返回指定数组内容的字符串表现形式。
Arrays.toString(int[] arr);
3、使用二分法搜索制定数组中的某个元素的下标
Arrays.binarySearch(int[] arr);
4、将将指定的 int 值分配给指定 int 型数组的每个元素。
Arrays.fill(int[] arr,int val);
5、复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
Arrays.copyOf(int[] arr,int newLength);它的返回值是一个数组
6、将指定数组的指定范围复制到一个新数组。 包含起始位置但不包含结束位置。
Arrays.copyOfRange(int[] arr,int from,int to);它的返回值是一个数组
其他数组知识:
1、命令行参数:可以在执行java命令时为main方法传入参数值。
用法:运行java命令时传入命令行参数: java 类名 "值1" "值2"...
public static void main(String[] args){},我们可以看到main方法是一个有参的方法,参数是一个字符串数组,在命令行为main方法传值时,传入的值都保存在args字符数组里。
注意:多个参数值之间用空格分割。参数的值将会保存到字符串数组传入main方法,下标从零开始。
在获取命令行参数时需要注意下标不能越界,最大下标应该为参数的个数-1
public static void main(String[] args){2 for(int i=0;i<args.length;i++){3 System.out.println(args[i]);4 }5 }
2、可变参数
可变参数是java1.5之后的新特性,可以代表零到多个相同数据类型的变量,是为了解决因参数个数的变化而导致过多的方法重载问题。
注意:1、可变参数只能用于形式参数(方法定义时),可以把可变参数当作数组来处理。
2、一个方法在最多只能有一个可变参数,可变参数必须作为最后一个参数。
3、调用带可变参数的方法时,数据类型必须与可变参数的类型对应。
1 public class Test1 { 2 public static void main(String[] args){ 3 double sum=add(4,2.1,3.4,1.2); 4 System.out.println(sum); 5 } 6 public static double add(int a,double...b){ 7 double sum=a; 8 for(int i=0;i<b.length;i++){ 9 sum+=b[i];10 }11 return sum;12 }13 }
例题:
合并数组操作:现有如下一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: int newArr [] ={1,3,4,5,6,6,5,4,7,6,7,5}
思路: 确定出不为0的个数,这样可以开辟新数组;从旧的数组之中,取出内容,并将其赋给新开辟的数组。
1 public class Test1 { 2 public static void main(String[] args){ 3 int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5}; 4 int[] arr=mergeArrays(oldArr); 5 System.out.println(Arrays.toString(arr)); 6 } 7 public static int[] mergeArrays(int[] oldArr){ 8 int count=0; 9 for(int i=0;i<oldArr.length;i++){10 if(oldArr[i]!=0){11 count++;12 }13 }14 int[] newArr=new int[count];15 int index=0;16 for(int i=0;i<oldArr.length;i++){17 if(oldArr[i]!=0){18 newArr[index]=oldArr[i];19 index++;20 }21 }22 return newArr;23 }24 }
2、使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。使用递归实现
1 public class Test1 { 2 public static void main(String[] args){ 3 int[] arr={1,2,3,4,5,6,7,8}; 4 int index=binarySearch(arr,6,0,arr.length-1); 5 System.out.println(index); 6 } 7 public static int binarySearch(int[] arr,int ele,int left,int right){ 8 int mid=(left+right)/2; 9 if(arr[mid]==ele){10 return mid;11 }else if(arr[mid]<ele){12 return binarySearch(arr,ele,mid+1,right);13 }else if(arr[mid]>ele){14 return binarySearch(arr,ele,left,mid-1);15 }16 return -1;17 }18 }
以上是常用的對數組進行的操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

十五大比特幣逃頂指標深度解析:2025年市場展望本文深入分析了十五個常用的比特幣逃頂指標,其中比特幣Rhodl比率、USDT活期理財和山寨幣季節指數已於2024年觸及逃頂區間,引發市場關注。面對潛在風險,投資者該如何應對?讓我們逐一解讀這些指標,並探討合理的應對策略。一、關鍵指標詳解AHR999囤幣指標:由ahr999創建,輔助比特幣定投策略。當前值為1.21,處於觀望區間,建議謹慎。鏈接AHR999逃頂指標:AHR999囤幣指標的補充,用於識別市場頂部。當前值為2.48,本週
