数组

1.为什么使用数组?

  • 比如我要统计每位员工的工资,我得定义多个变量去分开存储,因为一个变量只能保存一个数据,如果过多的员工,太麻烦了,那么我怎么用一个变量去存储多个员工工资呢?可以使用数组,数组就是一个大的容器,他可以存放多个值
    2.什么是数组?
  • 数组和变量差不多,都是存放数据的,不同的是变量只能保存一条数据,而数组可以保存多条数据,前提这个多条数据必须是同一类型的
  • 数组是引用数据类型
  • 数组一旦初始化,长度不可变。长度确定下来了
    3.如何定义数组?
  • 数组类型[] 数组名;
  • 如果定义好数组以后,必须要给数组进行初始化。
  • 数组是一个引用数据类型
    4、数据的初始化
  • Java中的数组必须先初始化,然后才能使用
  • 所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值
  • Java中可以使用关键字new创建数组对象,完成静态初始化或动态初始化
    数组的初始化分为两种情况:
  • (1).动态初始化:指定数组的长度,一旦长度指定,就是数组中只能存放多少数组
  • 两种格式:
  • 第一种:
  • 数组类型[] 数组名=new 数组类型[数组长度];
  • 第二种方式:
  • 数组类型[] 数组名;
  • 数组名=new 数组类型[数组长度];
  • (2)静态初始化:不是指定数组长度,而是直接在初始化数组的同时给数组赋值
  • 第一种:
  • 数组类型[] 数组名=new 数组类型[]{数据1,数据2…};
  • 第二种:
  • 数组类型[] 数组名;
  • 数组名=new 数组类型[]{数据1,数据2.。。。};
  • 还有一种最简单的方式:
  • 数组类型[] 数组名={数据1,数据2…};
    5、数组中常见的几种异常
    *(1)数组索引越界 ArrayIndexOutOfBoundsException
    访问到了数组中的不存在的索引时发生
    *(2)空指针异常 NullPointerException
    数组引用没有指向实体,却在操作实体中的元素时
    6、数据遍历
    *(1)for循环遍历数组(i代表的是数组的下标,第一个元素下标为0)
    int array=new int[]{14,2,6,34,90,89,12};
    System.out.println(“使用for循环遍历数组”);
    for(int i=0;i<array.length;i++){
    System.out.println(array[i]);
    }
    *(2)foreach(for循环的增强版)
    System.out.println(“foreach遍历数组”);
    for(定义变量接受数组的每一个元素值:要遍历的数组名)
    for(int a:array){
    System.out.println(a);
    }
    7、数组的分类:
    *(1)基本数据类型的数组:
    byte,short,long,int,float,double,char,boolean;
    默认值:0 0 0 0 0.0 0.0 空格 false;
    *(2)引用数据类型的数组:
    string默认值为null,接口,自己定义的类;
    引用数据类型的默认值为null;
    8、java中的内存是怎么进行分配的
  • 动态初始化数组时,由系统给出初始值,初始值为0
  • Java中内存的申请和释放都是JVM进行管理的,Java程序要运行,JVM都会自动的向电脑申请一块内存,把这块内存分为五部分:
    栈(Stack):主要存放局部变量,即在方法定义中或方法声明上的变量
    堆(Heap):凡是new出来的都存在堆里面,堆当中的数据都有默认原则
    整数:0,小数:0.0,布尔:false,char:空格,引用数据类型:null
    方法区(Method Area):存放的是与.class相关的信息
    本地方法区(Native Method Area):与操作系统有关
    寄存器(Register):与CPU有关
  • 堆内存的特点:(1)每一个new出来的东西都会有一个地址;
    (2)每个变量都会有默认值—课下作业
    (3)使用完毕就变成了垃圾,但是并没有立即回收,会等到垃圾回收器空闲时回收
  • 栈内存的特点:用完就释放掉
    9、冒泡排序
  • 冒泡算法原理:比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
  • 思想:数组中的元素两两比较,从大到小用<或从小到大用>输出;
  • 例:10,20,30,40,50,60 从大到小输出
    20,30,40,50,60,10 第一趟 5次
    30,40,50,60,20,10 第二趟 4次
    40,50,60,30,20,10 第三趟 3次
    50,60,40,30,20,10 第四趟 2次
    60,50,40,30,20,10 第五趟 1次
  • 总结:(1)N个数(数组的长度)比较了N-1趟;
    (2)次数=N-趟数=N-(N-1)=2N+1
  • 升序口诀:n个数据来排队,
    两两比较小靠前;
    外层循环n-1,
    内层循环n-1-i。
    10、二维数组(数组中的数组)
    *(1)声明二维数组格式:
    数据类型[][] 数组名;
    第一个中括号:二维数组中有几个一维数组,即有几行;
    第一个中括号:每个一维数组中有多少个元素,即有几列;
    *(2)初始化二维数组:
  • 动态初始化:
    数据类型[][] 数组名=new 数据类型[长度][长度];
    二维数组的默认值为0;
  • 静态初始化:
    1)数据类型[][] 数组名=new 数据类型[][]
    { {数据[0][0] 数据[0][1] …数据[0][n]}

{数据[n][0] 数据[n][1] …数据[n][n]} };
一个大括号里边的数据表示一个一维数组;
2)数据类型[][] 数组名= {
{数据[0][0] 数据[0][1] …数据[0][n]}


{数据[n][0] 数据[n][1] …数据[n][n]} };
*(3)遍历二维数组:
1)第一种:嵌套for循环:
外层循环控制行(每一个一位数组),
内层循环控制列(每个数组中的元素)。
2)第二种:增强for循环
for(int[] i:数组名){//获取每一个一位数组
for(int a:数组名){
system.out.print(a+" ");
}
system.out.println();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值