JAVA数组及数组的应用

一、数组

  • 一组数的容器。
  • 数组对每一个存入的数字都会自动编号,编号从0开始。——下标

二、数组的定义格式

  1. Type[] name = new Type[size]
    数组的大小一旦被定义,不可改变。
    在程序中第一次给变量赋值—–变量的初始化。
    直接打印数组,打印出的是数组的地址。
    打印的内容:[ I @ df6d9f8
    [ 表示对象的类型是数组
    I 如果这个对象是一个数组或者集合,那么这意味表示数组或集合中元素的类型
    @ 表后边是地址
    454f5gf5g 表示对象咋内存中地址对应hash码的十六进制的表现形式。
  2. int[] arr = new int[]{1,2,4,5,6}; — 定义好之后,初始元素已经一一赋值。
  3. int arr[] = {1,3,4,5,6,8}; —– 不支持先定义变量,在初始化变量。
    new 用于创建一个新的对象
    int arr[] = {1,2} — 在创建 的时候动态的获取数组的大小,然后才能分配内存空间
    int arr[]; arr[] = {1,2} 不可行,系统不知道数组的大小。

三、数组的应用

  1. 获取数组中的元素 — 数组名[下标]
  2. 获取数组中的长度 — 数组名.length length是一个属性,不是一个方法!
  3. 遍历数组 — 获取数组中所有的元素—for、增强for
    注意:增强for不能改变原来数组中的元素。
    对于基本类型而言,传值传的实际的数据,;对于引用类型数据传值传的是地址。
  4. 获取数组中最大|小值
  5. 对数组进行排序
    * 冒泡排序:
    思路:相邻两个数两两比较,交换位置。
    一共比较length-1轮
    第i轮比较j次,i+j=length
    j还要控制每次开始比较的下标

    public static void main(String[] args) {
    int arr[]={1,5,8,6,4,3,2};
    for(int i = 1;i<arr.length;i++){
        for(int j = 0;j<(arr.length-i);j++){
            if(arr[j]>arr[j+1]){
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    for(int i : arr){
        System.out.println(i);
    }
    }
    
    • 选择排序
      思路:第一位依次和后面的元素进行比较交换
      一共比较length-1轮
      第i轮比较j次,i+j=length

      public static void main(String[] args) {
      int arr[]={1,5,8,6,4,3,2};
      for(int i=0;i<arr.length;i++){
          for( int j= i;j<arr.length;j++){
              if(arr[i]>arr[j]){
                  int temp = arr[i];
                  arr[i] = arr[j];
                  arr[j] = temp;
              }
          }
      }   
      for(int i : arr){
          System.out.println(i);
      }
      }
      

      java.util.Arrays
      Arrays.sort(数组);//只能升序排序,从小到大。
      String s = Arrays.toString(arr); //将数组中的元素依次拿出来拼接成一个字符串。
      快速排序、希尔排序、堆排序。。。

  6. 查找数组中的元素
    针对无序数组,for循环遍历
    针对有序数组,用折半查找。

    /**
     * 针对有序数组的元素查找
     * 折半查找
     * */
    public class Demo_23 {
        public static void main(String[] args) {
            int arr[]={0,1,2,3,4,5,6,7,8,9};
            int num = 5;
            int min = 0;
            int max = arr.length-1;
            int mid = (min+max)/2;
            boolean flag = false;
            while(min<=max){
                if(num == arr[mid]){
                    flag = true;
                    break;
                }
                if(arr[mid]>num){
                    max = mid-1;
                }else{
                    min = mid+1;
                }
    
                mid = (min + max)/2;
            }
            if(flag){
                System.out.println("在数组中第"+mid+"位");
            }else{
                System.out.println("好像没有这个数!");
            }
        }
    
  7. 数组的反转
    (1)利用新的数组
    (2)数组元素首尾交换
    思路:利用两个变量同时控制数组的两端,进行交换。
  8. 数组的扩容(复制)
    System.arrayCopy(要复制哪个数组,要复制数组的起始位置,被复制到的数组,新数组中放置的起始位置,要复制元素的个数);
    扩/缩容的本质还是数组的复制
    数组 = Arrays.copyOf(数组,长度);
    表面上看起来只对数组的长度做了改变,实际上已经不是原来的数组了。
    数据类型在java底层通过泛型动态获取。

四、二维数组

  1. 是一组数组的容器—数组的数组
  2. 定义格式:数据类型[][] 数组名 = new 数据类型[二维数组的大小][所包含的一维数组的大小];
    • int[][] name = new int[3][5]
      这是一个包含3个一维数组的二维数组,每个一维数组有5个元素。
      arr[0][0]—- 获取具体的元素
    • 数据类型[][] name = new 数据类型[二维数组大小][];
      二维数组中包含的一维数组可以动态设置,而不再二维数组定义时统一指定。
    • 数据类型[][] name = {
      {元素1},
      {元素1,元素2},
      }
  3. 面试题:
    1. 对于数组int[] x, y[]均以初始化,下列正确的是:B,C
    A y = x; B y[0] = x; C y[0][0] = x[0]; D y[0] = x[0] E y = x[0]
    注意:[] 在变量名之前是紧跟数据类型的,那么后面跟的每个变量只少是一个一维数组;[]在变量名之后是仅属于变量的。
  4. 遍历二维数组 — 需要两个循环
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值