多平台统一管理软件接口,如何实现多平台统一管理软件接口
209
2023-05-10
java基础之数组常用操作总结(必看篇)
常用的对数组进行的操作
1、求数组中最大值,最小值
思路:假设下标为0的元素是最大值,遍历数组,依次跟max进行比较,如果有元素比这个max还大,则把这个值赋给max。最小值同样
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 if(arr[i]>max){ max=arr[i]; } if(arr[i] min=arr[i]; } } System.out.println("数组中最大值为:"+max); System.out.println("数组中最小值为:"+min); } } 2、查找数组中是否存在某个元素 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 if(arr[i]==element){ flag=1; break; } } if(flag==1){ System.out.println("你要查找的元素的下标为:"+i); }else{ System.out.println("你要查找的元素不存在"); } } } (2)、用二分查找法查找数组中是否存在某个元素 前提:待查找的数组必须是有序的(大小有序) 原理:将待查找的元素与数组中中间下标的元素进行比较,如果大于中间元素,去右边查找,小于中间元素,去左边查找。 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] left=mid+1; }else if(arr[mid]>ele){ right=mid-1; } } return index; } 3、对数组进行排序 (1)、冒泡排序 原理:相邻元素进行比较,小的往前赶,大的往后冒,最大值出现的最大索引处 分析:第一次进行比较,大的往后冒,会把最大值排在最大索引处 第二次进行比较,因为最大值已经确定了,只需要比较前n-1个元素即可,确定一个第二大值排在第二大索引处 依次确定第三大值,第四大值............. 结论:N个数字来排队,两两比较小靠前,外层循环n-1,内层循环n-1-i public class TestArray{ public static void main(String[] args){ int[] arr={10,3,8,1,6}; //外层循环控制比较轮数 for(int i=0;i //内层循环控制每轮比较次数 for(int j=0;j if(arr[j]>arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } //遍历数组 for(int i=0;i System.out.println(arr[i]); } } } (2)、选择排序 原理:从下标0处开始,依次和后边的元素进行比较,如果后面元素小于下标0的元素,换位。拿新的下标为0的元素和后边的进行比较。第一次完毕,最小值出现在索引0处 例:{10,3,8,1,6} 第一轮比较,从0下标元素开始,依次和后边的元素进行比较,先是10和3进行比较,10<3,交换位置,下标0的元素变成3,{3,10,8,1,6};再拿3和8比较,3<8,不换位;3和1进行比较,3>1,换位 {1,10,8,3,6},然后拿1和6进行比较,1<6,不换位置。第一轮结束,{1,10,8,3,6} 第二轮比较,上一轮已经确定了下标0的元素为最小值,这轮比较从下标1开始,先是10和8比较,换位{1,8,10,3,6};8和3比较,换位{1,3,10,8,6},3和6比较,不换位。第二轮结束,确定倒数第二小的元素在下标1位置。 ........ 共比较length-1轮。 public class TestArray{ public static void main(String[] args){ int[] arr={10,3,8,1,6}; for(int i=0;i kutnCbZQ for(int j=i+1;j if(arr[i]>arr[j]){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } //遍历数组 for(int i=0;i System.out.println(arr[i]); } } } 4、删除数组中元素 (1)根据下标删除元素(空位补0) public static void delete(int[] arr,int index){ for(int i=index;i arr[i]=arr[i+1]; } arr[arr.length-1]=0; System.out.println(Arrays.toString(arr)); } (2)根据输入的元素删除数组中对应的元素 public static void delete(int[] arr,int ele){ int index=-1; for(int i=0;i if(arr[i]==ele){ index=i; } } for(int i=index;i arr[i]=arr[i+1]; } arr[arr.length-1]=0; System.out.println(Arrays.toString(arr)); } 下面介绍一些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(Stringhttp://[] args){},我们可以看到main方法是一个有参的方法,参数是一个字符串数组,在命令行为main方法传值时,传入的值都保存在args字符数组里。 注意:多个参数值之间用空格分割。参数的值将会保存到字符串数组传入main方法,下标从零开始。 在获取命令行参数时需要注意下标不能越界,最大下标应该为参数的个数-1 public static void main(String[] args){ for(int i=0;i System.out.println(args[i]); } } 2、可变参数 可变参数是java1.5之后的新特性,可以代表零到多个相同数据类型的变量,是为了解决因参数个数的变化而导致过多的方法重载问题。 注意: 1、可变参数只能用于形式参数(方法定义时),可以把可变参数当作数组来处理。 2、一个方法在最多只能有一个可变参数,可变参数必须作为最后一个参数。 3、调用带可变参数的方法时,数据类型必须与可变参数的类型对应。 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 sum+=b[i]; } return sum; } } 例题: 合并数组操作:现有如下一个数组: 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的个数,这样可以开辟新数组;从旧的数组之中,取出内容,并将其赋给新开辟的数组。 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(http://Arrays.toString(arr)); } public static int[] mergeArrays(int[] oldArr){ int count=0; for(int i=0;i if(oldArr[i]!=0){ count++; } } int[] newArr=new int[count]; int index=0; for(int i=0;i if(oldArr[i]!=0){ newArr[index]=oldArr[i]; index++; } } return newArr; } } 2、使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。使用递归实现 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] return binarySearch(arr,ele,mid+1,right); }else if(arr[mid]>ele){ return binarySearch(arr,ele,left,mid-1); } return -1; } }
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~