数组
定义:存储一批同种类型数据的内存区域。
两种定义方法:
1.静态初始化数组:定义数组的时候就直接给数组赋值。
//数据类型[] 数组名 = new 数组类型[]{元素1,元素2……};
int[] ages = new int[]{19,26,33,25};
String[] names = new String[]{张三,李四,王五};
完整格式在书写的时候比较麻烦,但是Java还提供了一种简化格式方便我们使用。
//数据类型[] 数组名 = {元素1,元素2……};
int[] ages = {19,26,33,25};
String[] names = {张三,李四,王五};
2.动态初始化数组:定义数组的时候只确定元素的类型和数组的长度,之后再存入数据
//数据类型[] 数组名 = new 数组类型[长度];
int[] ages = new int[5];
注意事项:
1.元素默认值规则:
数据类型 | 明细 | 默认值 |
---|---|---|
基本类型 | byte,short,char,int,long | 0 |
基本类型 | float,double | 0.0 |
基本类型 | boolean | false |
引用类型 | 类,接口,数组,String | null |
2.两种定义方法不能混用!!!
数组的基本原理
数组的名称指向的是一个地址,这个地址指向的是存储数据的地方,如图.
数组的遍历,排序
数组的遍历
定义:就是一个一个数据的访问.
为什么要用到遍历:在之后的求和,搜索,排序等等地方都会用到遍历
int[] num = new int[]{11,22,33,44,55};
for (int i = 0; i < num.length; i++) {
System.out.print(num[i]);
}
这样子就可以实现数组的遍历.
数组的排序
定义:在数组遍历的基础上,通过一系列的比较方式,是原本散乱无章的数据按某种顺序排列好.
种类:插入排序,冒泡排序,希尔排序,堆排序等等(优先学习技术,这部分算法就不展开了,只讲讲冒泡排序)
冒泡排序
冒泡排序:重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
其主要思想是每次从数组中找出最大值放在数组的后面去
关键步骤分析:
1.确定总共需要做几轮:数组的长度-1
2.每轮比较的次数:(以数组长度为4举例)
代码实现:
for (int i = 0; i < num.length - 1; i++) {
for (int j = 0; j < num.length - i - 1; j++) {
if (num[j] > num[j + 1]) {
int temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}
数组的内存图
Java内存分配
Java为了执行程序,会将内存区分为五个部分(栈,堆,方法区,本地方法栈,寄存器),每个部分负责不同的内容,便于管理维护.
接下来,以数组为例来看看内存分配
public static void main(String[] args) {
int a = 2;
System.out.println(a);
int[] arr =new int[]{11,22,33};
System.out.println(arr);
arr[0]=44;
arr[1]=55;
arr[2]=66;
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
第一步,把类编译成class文件,加载到方法区里;
第二步,将类中的main方法提取到栈内存里,在栈内存里运行代码:为a变量和arr开辟一个空间,分别放置数据和地址,将数字2放入;
第三步,由于等号从右往左执行,所以,会先在堆内存里开辟一个空间,放置数组的相关数据,然后把数组的首地址赋值给arr;
第四步:通过数组的访问,将内容更改后输出.
数组使用常见问题
1.数组越界的错误提示:ArrayIndexOutOfBoundsException,程序运行在此处便会自动退出程序运行.
2.数组变量中没有存储数据的地址,而是null,在访问数组信息的时候会出现NullPointerException的错误提示
补充:Debug工具的使用
这是IDEA自带的断点调试(排错)工具,可以控制代码从断电开始一行一行执行,然后详细查看程序执行状况.
基本使用步骤:1.在需要控制的代码行左侧点击一下,形成断点;
2.选择使用Debug方式启动程序,启动后程序会在断点处暂停
3.控制代码一行行往下执行:点击Step Over
Debug工具的使用,可以快速找到错误所在,提高代码查错效率.
每日一练:
需求:某公司开发部5名开发人员,要进行项目进度汇报演讲,现采取随机排名后进行汇报,请先输入5名员工的工号,然后展示出一组随机的排名顺序
public class ArrayDemo {
//实现随机排名
public static void main(String[] args) {
//1.录入五名程序员的编号
int[] num =new int[5];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < num.length; i++) {
System.out.print("请输入第"+(i+1)+"个程序员的编号:");
num[i] = sc.nextInt();
}
//2.生成一个随机数
Random r =new Random();
for (int i = 0; i < num.length; i++){
int j = r.nextInt(num.length);
while(true){
if(i!=j) break;
else j = r.nextInt(num.length);
}
int swap=num[i];
num[i]=num[j];
num[j]=swap;
}
//3.输出排序后的顺序
System.out.print("最终顺序是");
for (int i = 0; i < num.length; i++) {
System.out.print(num[i]+" ");
}
}
}
最终结果: