常用的对数组进行的操作

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<arr.length;i++){
             if(arr[i]>max){
                 max=arr[i];
             }
             if(arr[i]<min){
                 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<arr.length;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]<ele){
                 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<arr.length-1;i++){
             //内层循环控制每轮比较次数
             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;
                 }
             }
         }
         //遍历数组
         for(int i=0;i<arr.length;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<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;
                 }
             }
         }
         //遍历数组
         for(int i=0;i<arr.length;i++){
             System.out.println(arr[i]);
         }
     }
 }

4、删除数组中元素

(1)根据下标删除元素(空位补0)

 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)根据输入的元素删除数组中对应的元素

 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里面常见的对数组的操作

在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、调用带可变参数的方法时,数据类型必须与可变参数的类型对应。

 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;
     }
 }

例题:

  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的个数,这样可以开辟新数组;从旧的数组之中,取出内容,并将其赋给新开辟的数组。

 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、使用二分法查找有序数组中元素。找到返回索引,不存在输出-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]<ele){
             return binarySearch(arr,ele,mid+1,right);
         }else if(arr[mid]>ele){
             return binarySearch(arr,ele,left,mid-1);
         }
         return -1;
     }
 }

java基础之数组常用操作的更多相关文章

  1. js,jQuery数组常用操作小结

    一.js中数组常用操作小结 (1) shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift() ...

  2. 数组toString()方法,数组常用操作

    int[] arr ={1,2,3,4,5}; String arrString = Arrays.toString(arr); //输出[I@7150bd4d System.out.println( ...

  3. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  4. 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)

    定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...

  5. JAVA基础语法:常用功能符以及循环结构和分支结构(转载)

    3.JAVA基础语法:常用功能符以及循环结构和分支结构 1.常用功能符 注释 ("文字"是被注释的部分) //文字 单行注释 /文字/ 多行注释 算术运算符 + - * / / 整 ...

  6. Java 语言基础之数组常见操作

    对数组操作最基本的动作: 存和取 核心思想: 就是对角标的操作 数组常见操作: 1, 遍历 2, 获取最大值和最小值 3, 排序 4, 查找 5, 折半查找 // 1. 遍历 int[] arr = ...

  7. Java基础总结--数组

    ---数组的定义---组织存储一组数据1.存放相同类型数据的集合--就是一种容器本质上变量也是一种容器--区别就是只存储了一个数据的容器--面对容器,而不是分散的数据eg.买一盘鸡蛋--蛋托其实就是容 ...

  8. java:Cookie(常用操作),Cookie和Session免登录实例

     1.常用操作: package cn.zzsxt.lee.web.cookie; import java.io.IOException; import javax.servlet.ServletEx ...

  9. 黑马程序员——JAVA基础之数组

    ------- android培训.java培训.期待与您交流! ---------- 数组: 数组的定义: 数组是相同类型数据的集合, 描述的是相同类型的若干个数据按照一定的先后顺序排列组合而成,其 ...

随机推荐

  1. jenkins+webhook+docker做持续集成

    简介:我们现在都流行把项目封装成docker的镜像,不过实际用的时候就会发现很麻烦,我们每次更改代码了以后都要打包成docker容器 ,事实证明项目比较多的时候真的会让人崩溃,我这边用spring c ...

  2. 人生第一次hash

    人生的第一次hash交给了模板题. 讲道理,还没有别人快排要快,就比暴力快那么一点... 难道我写的hash就那么菜么? 我想了想,光是处理字符串就O(n*len).. 这是hash的正确写法吗?我都 ...

  3. node.js系列(实例):原生node.js实现静态资源管理

    /** * node入门之综合案例(一):简易路由 * @Author : by Ghost * @Date : 2016/07/11 * @Description : * 1.引入以下模块 * ht ...

  4. 软件工程工具学习(1)---Visio

    要给15级软件工程上机了.开个系列记录软件工程开发过程中所会用到的一些工具的学习. 第一篇---软件分析与设计工具 Microsoft Visio Visio 介绍 1.Visio是一款矢量图形与图标 ...

  5. 对数据缺失的处理(R)

    在进行数据分析之前,我们往往需要对数据进行预处理,而最重要一部分就是怎么处理哪些缺失的数据. 通常的方法有四种: 删除这些缺失的数据. 用最高频数来补充缺失数据. 通过变量的相关关系来填充缺失值. 通 ...

  6. 【原创】bootstrap框架的学习 第七课 -[bootstrap表格]

    Bootstrap 表格 标签 描述 <table> 为表格添加基础样式. <thead> 表格标题行的容器元素(<tr>),用来标识表格列. <tbody& ...

  7. EasyUI datagrid默认勾选checkbox时注意事项

    在使用easyui的datagrid默认选中复选框时遇到的一个问题:就是加载程序默认选中复选框时死活选不中,查了好多资料才知道是easyui的datagrid的singleSelect属性设置为‘tr ...

  8. 原生JS和JQuery代码编写窗口捕捉函数和页面视觉差效果(scroll()、offsetTop、滚动监听的妙用)

    想实现窗口滚动到一定位置时,部分网页的页面发生一些变化,但是手头没有合适的插件,所以就想到自己编写一个简易的方法, 想到这个方法要有很高的自由度和适应性,在这,就尽量的削减其功能,若有错误的地方或者更 ...

  9. Spring+SpringMvc+Mybatis 框架的搭建(一)

    本文是因为实习结束后学习到了新的技术,想写下来和更多人交流.开发中遇到的问题我也会一一说明,希望有更多人可以互相探讨,加入到一起来. 1. Spring+SpringMvc +Mybatis 的作用有 ...

  10. vue渲染数据后与owlCarousel轮播插件冲突,失效

    主要原因:dom解析准备完成后,开始执行$(document).ready(); 而vue是在window.onload(页面加载完后才执行):所以会导致owlCarousel插件失效. 解决方案:数 ...