欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(1.8)java基础语法自述--数组

程序员文章站 2022-05-21 21:04:38
...

(1.8)java基础语法自述–数组

一,创建数组

数组是一个固定长度的,包含了相同类型数据的 容器

  1. 申明数组 ,

    • 注意仅仅是这一句只是申明,不会创建
    int [] a; //申明了一个数组变量
    		  //int 表示数组里的每一个元素都是一个整数,[]表示该变量是一个数组,a 是变量名。
    
  2. 创建数组,

    • 创建数组的时候,要指明数组的长度。new int[5]
    • 引用概念:如果变量代表一个数组,比如a,我们把a叫做引用
    • 声明一个引用 int[] a,
      • a = new int[5],让a这个引用,指向数组
            //声明一个引用
            int[] a;
            //创建一个长度是5的数组,并且使用引用a指向该数组
            a = new int[5];
    
            int[] b = new int[5]; //声明的同时,指向一个数组
    
  3. 访问数组

    • 数组下标为从0开始
    • 即下标为0的第一个数代表数组里的第一个数
  4. 数组长度

    • .length属性用于访问一个数组的长度,访问长度为0—length-1,超过这个范围就会产生越界异常。
    system.out.println(a.length);
    

二,初始化数组

主要是分配空间与赋值

  1. 当分配空间与赋值分步进行
		int[] a = new int[5]; //分配了长度是5的数组,但是没有赋值
         
        //没有赋值,那么就会使用默认值
        //作为int类型的数组,默认值是0
        System.out.println(a[0]);

		//进行赋值
        a[0] = 100;
        a[1] = 101;
        a[2] = 103;
        a[3] = 120;
        a[4] = 140;
  1. 分配空间,同时赋值
//写法一: 分配空间同时赋值
        int[] a = new int[]{100,102,444,836,3236};
 
        //写法二: 省略了new int[],效果一样
        int[] b = {100,102,444,836,3236};
         
        //写法三:同时分配空间,和指定内容
        //在这个例子里,长度是3,内容是5个,产生矛盾了
        //所以如果指定了数组的内容,就不能同时设置数组的长度
        int[] c = new int[3]{100,102,444,836,3236};//报错

三,排序

  1. 选择排序

    • 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来
    • 比较完后,第一位就是最小的
    • 然后再从第二位和剩余的其他所有进行比较,只要比第二位小,就换到第二个位置来
    • 比较完后,第二位就是第二小的,依次类推。
  2. 冒泡排序

    • 第一步:第一位开始,把相邻两位进行比较,交换将大的放后面,循环一般,最后一位就是最大的
    • 第二步:再来一遍,但最后一位不用比较了
    • 以此类推

四,增强型for循环

  • 增强型for循环在遍历一个数组的时候会更加快捷

  • 注:增强型for循环只能用来取值,却不能用来修改数组里的值

int values [] = new int[]{18,62,68,82,65,9};
//常规遍历
for(int i=0;i<values.length;i++){
    int each = values[i];
    system.out.println(each);
}

//增强型for循环
for(int each:values){
    system.out.println(each);
}

五,java如何复制数组

  • 数组的长度是不可变的,一旦分配好空间,是多长,就多长,不能增加也不能减少

  • 复制数组:把一个数组的值,复制到另一个数组中

//方法一
System.arraycopy(原数组,从原数组复制的起始位置,目标数组,复制到目标数组的起始位置,复制的长度)

//方法二
    for循环
    

六,二维数组

  • 二维数组里的每一个元素,都是一个一维数组,所以二维数组也叫数组的数组
int b[][] = new int[][]{
    {1,2,3},
    {2,3,4},
    {3,4,5}
};
  • 初始化二维数组
//初始化二维数组,
       int[][] a = new int[2][3]; //有两个一维数组,每个一维数组的长度是3
       a[1][2] = 5;  //可以直接访问一维数组,因为已经分配了空间
          
       //只分配了二维数组
       int[][] b = new int[2][]; //有两个一维数组,每个一维数组的长度暂未分配
       b[0]  =new int[3]; //必须事先分配长度,才可以访问
       b[0][2] = 5;
        
       //指定内容的同时,分配空间
       int[][] c = new int[][]{
               {1,2,4},
               {4,5},
               {6,7,8,9}
       };

七,Arrays

  • Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能。 大大提高了开发人员的工作效率。
  1. copyOfRange ()
    • 使用System.arraycopy进行数组复制类似的, Arrays提供了一个copyOfRange方法进行数组复制。
    • 不同的是System.arraycopy,需要事先准备好目标数组,并分配长度。 copyOfRange 只需要源数组就可以了,通过返回值,就能够得到目标数组了。
    • 除此之外,需要注意的是 copyOfRange 的第3个参数,表示源数组的结束位置,是取不到的
        int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
 
        // copyOfRange(int[] original, int from, int to)
        // 第一个参数表示源数组
        // 第二个参数表示开始位置(取得到)
        // 第三个参数表示结束位置(取不到)
        int[] b = Arrays.copyOfRange(a, 0, 3);
  1. 转换为字符串:toString(a)
    • 如果要打印一个数组的内容,就需要通过for循环来挨个遍历,逐一打印
    • 但是Arrays提供了一个toString()方法,直接把一个数组,转换为字符串,这样方便观察数组的内容
        int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
        String content = Arrays.toString(a);
        System.out.println(content);
  1. 排序:sort(a)

    • sort()将数组按照从小到大重新自动排列
  2. 搜索:binarySearch(a,位号)

    • 查询元素出现的位置

    • 需要注意的是,使用binarySearch进行查找之前,必须使用sort进行排序

    • 如果数组中有多个相同的元素,查找结果是不确定的.

        int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
 
        Arrays.sort(a);//将数组排列
 
        System.out.println(Arrays.toString(a));
        //使用binarySearch之前,必须先使用sort进行排序
        System.out.println("数字 62出现的位置:"+Arrays.binarySearch(a, 62));
  1. 判断是否相同: .equals(a,b)
    • 比较两个数组的内容是否一样,不一样返回false。
        int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
        int b[] = new int[] { 18, 62, 68, 82, 65, 8 };
 
        System.out.println(Arrays.equals(a, b));
  1. 填充: .fill()
    • 使用同一个值,填充整个数组
        int a[] = new int[10];
  
        Arrays.fill(a, 5);
  
        System.out.println(Arrays.toString(a));