首页 Java java教程 常用的对数组进行的操作

常用的对数组进行的操作

Jun 21, 2017 pm 04:40 PM
java 基础 常用 操作 数组

常用的对数组进行的操作

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 }
登录后复制

(2)、用二分查找法查找数组中是否存在某个元素

    前提:待查找的数组必须是有序的(大小有序)

    原理:将待查找的元素与数组中中间下标的元素进行比较,如果大于中间元素,去右边查找,小于中间元素,去左边查找。

 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 }
登录后复制

(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轮。

 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 }
登录后复制

例题:

  1. 合并数组操作:现有如下一个数组: 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 }</p>
登录后复制

 

 

 

 

以上是常用的对数组进行的操作的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java 中的完美数 Java 中的完美数 Aug 30, 2024 pm 04:28 PM

Java 完美数指南。这里我们讨论定义,如何在 Java 中检查完美数?,示例和代码实现。

Java 中的随机数生成器 Java 中的随机数生成器 Aug 30, 2024 pm 04:27 PM

Java 随机数生成器指南。在这里,我们通过示例讨论 Java 中的函数,并通过示例讨论两个不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。这里我们通过示例讨论简介、如何使用weka java、平台类型和优点。

Java 中的史密斯数 Java 中的史密斯数 Aug 30, 2024 pm 04:28 PM

Java 史密斯数指南。这里我们讨论定义,如何在Java中检查史密斯号?带有代码实现的示例。

Java Spring 面试题 Java Spring 面试题 Aug 30, 2024 pm 04:29 PM

在本文中,我们保留了最常被问到的 Java Spring 面试问题及其详细答案。这样你就可以顺利通过面试。

突破或从Java 8流返回? 突破或从Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

Java 中的时间戳至今 Java 中的时间戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的时间戳到日期指南。这里我们还结合示例讨论了介绍以及如何在java中将时间戳转换为日期。

15个常用的币圈逃顶指标技术分析 15个常用的币圈逃顶指标技术分析 Mar 03, 2025 pm 05:48 PM

十五大比特币逃顶指标深度解析:2025年市场展望本文深入分析了十五个常用的比特币逃顶指标,其中比特币Rhodl比率、USDT活期理财和山寨币季节指数已于2024年触及逃顶区间,引发市场关注。面对潜在风险,投资者该如何应对?让我们逐一解读这些指标,并探讨合理的应对策略。一、关键指标详解AHR999囤币指标:由ahr999创建,辅助比特币定投策略。当前值为1.21,处于观望区间,建议谨慎。链接AHR999逃顶指标:AHR999囤币指标的补充,用于识别市场顶部。当前值为2.48,本周

See all articles