java基础之数组

数组

一维数组

概念

  • 记录单个数据内容时,声明一个变量即可
  • 在程序中记录多个类型相同的数据内容时,声明一个一维数组即可
  • 一维数组的本质是在内存空间中申请一段连续的存储单元
  • 数组是相同数据类型的多个元素的容器:::
  • 元素按线性顺序排列,体现为一种 引用数据类型
    概念

格式

  • 数据类型[] 数组名称 = new 数据类型[数组长度];
    • 数组长度 在声明的时候进行设定及length属性进行获取
    • 通过下标的方式访问数组中的每一个元素
      数组的下标从 0 开始;对于长度为n的数组,下标的范围是 0 ~ n-1

内存结构分析

  • 内存结构之区 【基本数据类型】
    • 栈用于存放程序运行过程中所有的局部变量。 一个运行的java程序从开始到结束会有多次变量的声明
    • 存放当前变量的值
      int num = 2;
  • 内存结构之区 【引用数据类型】
    • jvm会在内存空间中开辟一个称为“堆”的存储空间,这部分空间用于存储使用new关键字创建的数组和对象
    • 存放当前对象的内存地址
      int[] num = int[2];

一维数组优缺点

  • 优点

    • 直接通过下标(索引)的方式访问指定位置的元素 快速
  • 缺点

    • 所有元素类型必须相同
    • 内存空间必须连续,长度一点确定就不能修改
    • 增加和删除元素时可能移动大量元素,效率低

实践出真理

1.基操

void BaseTest() {
    //定义一个一维数组  int类型、长度为3
    int[] array = new int[3];
    //方式二 不推荐使用,容易与 变量的声明区分,提高代码可读性
    //int array_1[] = new int[3];

    //获取数组的长度
    int array_Length = array.length;
    System.out.println("数组的长度为: " + array_Length);
    for (int i = 0; i < array_Length; i++) {
        System.out.println("当前下标为: " + i + "  的内容是: " + array[i]);
    }

    //在声明的同时进行赋值    静态方式简化版
    char[] chars = {'a', 'b', 'c', 'd'};
    //方式二  静态方式
    boolean[] bool = new boolean[]{false, true, true, false};
    for (int i = 0; i < chars.length; i++) {
        System.out.println("当前下标为: " + i + "  的内容是: " + chars[i] + "\tbool中的内容为: " + bool[i]);
    }

}

运行结果:

2.增删改查操作

void AddDelChaIns() {
    int[] arr = new int[5];
    // 将 “11、22、33、44”按顺序从头(下标为0)进行赋值
    // arr[0] = 11;
    // arr[1] = 22;
    // arr[2] = 33;
    // arr[3] = 44;
    //简化操作
    for (int i = 0; i < arr.length - 1; i++) {
        arr[i] = (i + 1) * 11;
    }
    System.out.print("赋值后--数组中的内容为: ");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "  ");
    }
    System.out.println();

    //将 “55” 插入 头部位置(下标为0)
    for (int i = arr.length - 1; i > 0; i--) {
        arr[i] = arr[i - 1];
    }
    arr[0] = 55;
    System.out.print("插入后--数组中的内容为: ");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "  ");
    }
    System.out.println();

    //将 55 从头部位置删除
    for (int i = 0; i < arr.length - 1; i++) {
        arr[i] = arr[i + 1];
    }
    arr[arr.length - 1] = 0;
    System.out.print("删除后--数组中的内容为: ");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "  ");
    }
    System.out.println();

    //查找 22
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == 22) {
            arr[i] = 330;
            break;
        }
    }
    System.out.print("修改后--数组中的内容为: ");
    for (int i = 0; i < arr.length; i++) {
        System.out.print(arr[i] + "  ");
    }
    System.out.println();
}

运行结果:

3.数组间的拷贝(复制)

void Copy() {
    int[] arr = {11, 22, 33, 44, 55};
    int[] co = new int[3];

    //粗暴
    co[0] = arr[1];
    co[1] = arr[2];
    co[2] = arr[3];
    //温柔一点
    for (int i = 0; i < co.length; i++) {
        co[i] = arr[i + 1];
    }
    //util
    System.arraycopy(arr, 1, co, 0, 3);
}

  • 数组拷贝 co = arr 操作 :
    直接用数组arr中的内容覆盖co中的内容

4.统计用户输入的任意整数中各个数字出现的次数

void StatisticsNum() {
    int[] numArr = new int[10];
    System.out.println("请输入任意一个正整数:");
    Scanner sc = new Scanner(System.in);
    int numInput = sc.nextInt();
    System.out.println("输入的数字为: " + numInput);
    int temp = numInput;
    int num = 0;
    while (temp > 0) {
        num = temp % 10;
        temp /= 10;
        numArr[num] = numArr[num] + 1;
    }

    for (int i = 0; i < numArr.length; i++) {
        if (numArr[i] <= 0) continue;
        System.out.print("\n数字 " + i + "\t出现的次数为: " + numArr[i]);
    }
}

运行结果:

5.保存并计算学生的总成绩与平均分

void StudentScore() {
    System.out.println("请输入学生人数");
    Scanner sc = new Scanner(System.in);
    int studentCount = sc.nextInt();

    int[] scores = new int[studentCount];
    int score = 0;
    int total = 0;
    for (int i = 0; i < studentCount; i++) {
        System.out.println("请输入第 " + (i + 1) + " 个学生的成绩");
        score = sc.nextInt();
        scores[i] = score;
        total += score;
    }
    for (int i = 0; i < studentCount; i++) {
        System.out.println("第 " + (i + 1) + " 个学生的成绩为: " + scores[i]);
    }
    System.out.println("学生的总成绩为: " + total + "\n平均分为: " + total * 1.0 / studentCount);
}

运行结果:

数组工具类

  • java.util.Arrays
  • 功能:对数组中元素的遍历、查找、排序等操作

实践出真理

1. 遍历 toString
  ```java
  int [] array = new int[5];
  System.out.println("当前数组中的元素为: "+Arrays.toString(array));
  //当前数组中的元素为: [0,0,0,0,0]
  ```
2. 填充指定值 fill
  ```java
  Arrays.fill(array,3);
  System.out.println("当前数组中的元素为: "+Arrays.toString(array));
  //当前数组中的元素为: [3,3,3,3,3]
  ```
3. 判断两个数组元素内容次序是否相同 equals
  ```java
  int[] arr = {4,4,4,4,3};
  System.out.println(Arrays.equals(arr,array));       //  false
  Arrays.fill(arr,3);
  System.out.println(Arrays.equals(arr,array));       //  true
  ```
4. 排序 sort 从小到大的顺序
   int[] arr_Order = {12,52,36,21,10};
   Arrays.sort(arr_Order)
   System.out.println(Arrays.toString(arr_Order))
   // [10,12,21,36,52]
5. 查找参数指定元素所在的位置 binarySearch
   System.out.println(" 36分在数组中的下标位置是: " + Arrays.binarySearch(arr_Order,36))
   //   36分在数组中的下标位置是: 3

   // 如果要查找的元素不存在数组中,则输出 -2

二维数组

概念与格式

  • 本质上有多个一维数组摞在一起组成的数组
  • 二维数组中的每个元素都是一维数组:::
  • !!一维数组中的每个元素才是数据内容 !!


  • 声明和使用
  • 数据类型[][] 数组名称 = new 数据类型[行数][列数];
  • 数据类型[][] 数组名称 = {{元素1,元素2,元素3,元素...},{},{},{}};
    int[][] arr_Two = new int[2][3];
    int tempValue = 0;
    //初始化并赋值
    //方式一 初始化的同时进行赋值
    int[][] arr_Two ={{0,1,2},{3,4,5}};    
    //方式二 通过遍历的方式进行赋值 
    for (int i = 0; i < arr_Two.length; i++) {
        for (int j = 0; j < arr_Two[i].length; j++) {
            arr_Two[i][j] = tempValue++;
        }
    }
    for (int i = 0; i < arr_Two.length; i++) {
        for (int j = 0; j < arr_Two[i].length; j++) {
            System.out.print(arr_Two[i][j] + "\t");
        }
        System.out.println();
    }
    
    

    结果输出:
    二维数组.png

实践出真理

  1. [杨辉三角]


void YangHuiTriangle() {
    System.out.println("请输入要显示的行数: ");
    Scanner sc = new Scanner(System.in);
    int row = sc.nextInt();
    int[][] yh = new int[row][];
    for (int i = 0; i < row; i++) {
        yh[i] = new int[i + 1];
        for (int j = 0; j <= i; j++) {
            if (0 == j || i == j) {
                yh[i][j] = 1;
            } else {
                yh[i][j] = yh[i - 1][j] + yh[i - 1][j - 1];
            }
        }
    }
    for (int i = 0; i < row; i++) {
        for (int j = 0; j <= i; j++) {
            System.out.print(yh[i][j] + "\t");
        }
        System.out.println();
    }

}

运行结果:
杨辉三角.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容