第十天学Java(数组)
回顾
1、递归算法
一个方法中,自己调用了自己
递归方法一定要有出口,逐渐向出口靠近
2、数组
概念
一组连续的内存空间,存贮多个相同数据类型的值
注意点
内存连续
数据类型一直
数组是引用类型的数据
数组的使用
1、创建数组
2、使用数组:存储数据,访问数据
语法规则
创建数组
方式一:数据类型【】 数组名= new 数据类型【长度】;
使用数组
数组名【index】,index:下标,固定从0开始的,0,1,2,.。。index-1;
数组的遍历
遍历:一次访问,从第一个元素,访问到最后一个元素
1、使用循环来遍历数组
for(int i=0;i<arr.length;i++){
}
2、for-each循环】、【扩展】
增强for循环,JDK1.5的版本出现的
特定的用法,专门用于获取数组中的每一个元素的值,不能给数组赋值
语法结构:
for(数据类型 变量名:数组名){
Syste.out.println(变量名);
}
工作原理
for(int e:arr){
Syste.out.println(e);
}
int e:定义一个变量e
依次获取数组的元素,赋值给e
注意点:
1、for-each只能获取数组的数据,但是不能给数组进行赋值
2、for-each在代码这个层面。不能操作下标。
数组中的默认值
数组中存储的默认值:
数组中是有默认值的
整数:0.
小数:0.0
字符:\u0000
布尔:false
其他:null
数组的默认值,就是数组创建后,里面存储的默认的数据
数组的引用存在在栈内存中,数组本身存在在堆内存中
数组创建完,就有默认的数据了
创建数组的其他语法
动态创建数组,先创建数组,然后再根据下标一个一个存储数据
A:先声明,在创建(分配内存空间)
数据类型[] 数组名;
数组名 = new 数据类型[长度];
B:声明并创建
数据类型 [] 数组名 = new数据类型[长度];
数据类型 数组名[] = new 数据类型[长度];
//静态创建数组,声明,创建,赋值,一起写完
C: 声明,创建并赋值
数据类型[] 数组名 = {数值1,数值2,数值3.。。。}
=左边声明数组,=右边,会先根据{}中数据源的个数,然后再将{}中的数据,按照顺序存储进去
完成了几件事
1、先声明。int[] c
2、根据{}中数组值的个数,开辟堆内存
3、将{}中的数组值,依次按照顺序存入数组中
D:声明,创建,并赋值
数据类型[] 数组名 = new 数据类型[]{数值1,数值2,数值3.。。。}
数组的地址转移
Java中的数据分为两大类:
基本类型:4中8类
操作的都是数值本身
引用类型:数组
操作的是地址
基本类型进行赋值:数值
引用类型进行赋值:地址
可变参数
同一种类型的参数,类型固定的,但是个数是不固定的,个数可以为0到多个,可以为0
语法的支持:
数据类型 ... 参数名
在方法中可变参数当数组使用
注意事项:
1、如果参数列表中,除了可变参数还有其它参数,可变参数要写在参数列表的最后
2、一个方法中最多只能有一个可变参数
数组的排序
排序:数组是存储一组数据,而且这些数据都是有顺序的,但是数值本身是无序的
排序:升序(数值从小到大),降序(数值从大到小)。
排序
1、冒泡排序:Bubble Sort
思路:比较相邻的两个数,大的向后面去一位
自我总结
今天主要学习的重点是数组,也是比较重要的吧,今天也中招了一次,就是再给数组赋值的时候,原来是一起都要改变的,并不是只改变一个数组的值,改变的是地址指向的堆内存中所有对应的数组的值,写上代码看一下吧,不然都不知道在表达什么,大家可以看一下这段代码
int[] a = new int[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
int[] c = a;
c[0] = 100;
System.out.println(a[0]);
System.out.println(c[0]);
其实输出的都是100,并不是先输出1,在输出100,我一开始以为是这样的,但是当整个运行过程分析了之后,就发现其实输出的都是100