数组概述
数组的概念:用来保存一组具有相同数据类型的数据的一种存储结构。
注意:数组也是一种数据类型,数组类型,属于引用数据类型
数组的定义语法:
1、 数据类型[ ] 数组名=new 数据类型[数组中存储数据个数];-----推荐使用该语法
2、 数据类型 数组名[ ]=new 数据类型[数组中存储数据个数];
获取数组的长度:数组名.length
获取数组元素:数组名[下标 ]
3、 数据类型[] 数组名={值1,值2,…值n};
4、 数据类型[] 数组名=new 数据类型[]{值1,值2,…值n};
数组原理内存图
内存概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机要运行程序,必须要对内存进行空间的分配和管理.
Java 虚拟机的内存划分
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式
-
JVM 的内存划分
区域名称 | 作用 |
---|---|
寄存器 | 给CPU使用,和我们开发无关 |
本地方法栈 | JVM在使用操作系统功能的时候使用,和我们开发无关。 |
方法区 | 存储可以运行的class文件 |
堆内存 | 存储对象或者数组,new来创建的,都存储在堆内存 |
方法栈 | 方法运行时使用的内存,比如main方法运行,进入方法栈中执行 |
数组在内存中的存储
-
一个数组内存图
public static void main(String[] args) { int[] arr = new int[3]; System.out.println(arr);//[I@5f150435 }
以上方法执行,输出的结果是[I@5f150435,这个是什么呢?是数组在内存中的地址。new出来的内容,都是在堆内存中存储的,而方法中的变量arr保存的是数组的地址
数组元素的打印
向数组中插入一个元素
需求说明:按照如下操作向数组中插入元素,实现效果如图所示:
(1)将成绩保存在数组中;
(2)通过比较找到插入位置;
(3)该位置元素往后移一位;
(4)插入新成绩;
思路:1、要添加新成绩的数组必须是有序
2、查找新添加元素的插入位置
3、将位置腾出来
4、腾出来的位置放入新元素
、冒泡排序
需求说明:冒泡排序时注意以下关键点:
(1)5个数字如何存放:(数组,数组.length = 5)
(2)控制比较多少轮:(外层循环,循环变量 i)
(3)控制每轮比较多少次:(内层循环,循环变量 j)
(4)交换数据;
Arrays类排序数组
需求说明:正确使用Arrays的sort()方法为数组进行排序,效果如下图所示。降序排列的写法可以参考for(int i=scores.length-1;i>=0;i--){}
Public class Demo1{
Public static void main(String[] args){
int[] scores=new int[5];
Scanner input = new Scanner(System.in);
System.out.println("请输入五个学员的成绩:");
for (int i = 0; i < scores.length; i++) {
scores[i]=input.nextInt();
}
System.out.println("排序前的成绩:");
for (int i = 0; i < scores.length; i++) {
System.out.print(scores[i]+"\t");
}
Arrays.sort(arr);
System.out.println("学员成绩按照升序排序后的结果:");
for (int num : arr) {
System.out.print(num+"\t");
}
System.out.println("学员成绩按照降序排序后的结果:");
for (int i =arr.length-1; i >=0; i--) {
System.out.print(arr[i]+"\t");
}
}
}
冒泡排序
口诀:N个数据来排序,外层循环N-1,内层循环N-1-I N:数组长度