数组
一 . 一维数组的经典及应用
回顾 :
-
变量存储数据
double xutaizhou = 10;
double handongbo = 20;
…
(xutaizhou+handongbo+…)/29
**数据类型:**byte short int long float double char String boolean
变量的命名规则:
- 由字母、数字、下划线和美元符号组成,但是数字不能开头。
- 采用驼峰命名法(小驼峰) 还可以采用下划线连接方式。
- 见名知意
- 不能使用关键字
-
数组(数据的组合)
(1). 理解数组的作用
1) . 实际上是计算机中一块内存地址的表示
解决了当要存储的变量多时,一个一个变量的表示过于麻烦而学到数组
例 : 100个学生需100个变量,而数组会把他存储到一个变量中
一个变量就是在内存空间划出一块合适的空间
一个数组就是在内存空间划出一串连续的空间
(2). 理解数组的定义
**数组:**存储一组相同数据类型
的数据。(数组长度不可变
)
数组的四要素:
- 数据类型(数组中存储的元素的类型)
- 数组名(标识符)
- 元素(数组中存储的一个个数据)
- 元素下标(索引) 从0开始 数组中每一块空间都有固定的下标
数组:是一种数据结构。
(3). 掌握数组中的基本应用
1)声明数组 int[ ] a; 告诉计算机数据类型是什么
2) 分配空间 a = new int [5]; 告诉计算机分配几个连续的空间
3) 赋值 a [0] = 8; 向分配的格子里放数据 , 赋的值必须与数组类型一致
4) 处理数据 a[0] = a[0]*10;
也可声明数组并分配空间
score = new int[30];
语法: 数据类型 [ ] 数组名 = new 数据类型 [数组长度];
数组的开辟过程:
- 在栈中声明/引用
- 在堆中进行开辟空间,并且划分区域,进行赋值默认值。
- 将堆中的空间地址赋值给栈中的声明。
- 
数组元素不同有不同的初始值
int 类型的初始值默认为0
String类型的初始值默认为null
double 类型的初始值为0.0
char ——>\u000 空字符
boolean——> false
增强for(foreach)
for(数组中元素类型 遍历出来的元素名 : 要遍历的数组名){
}
例 for(int score : scores){
}
(4)冒泡排序
冒泡排序原理:相邻元素进行比较,小的靠前,大的靠后
公式:`外层循环n-1 内层循环n-1-i
public class BubbleSortDemo {
public static void main(String[] args) {
int[] arr = {90,20,99,43,35};
// 外层循环n-1
for(int i = 0; i < arr.length - 1; i++) {
// 内层循环n-1-i
for(int j = 0; j < arr.length-1-i; j++) {
// 比较并且位置移动
if(arr[j] < arr[j+1]) {
// 借助中间变量
int temp = arr[j]; // 雪碧 -> 空瓶
arr[j] = arr[j+1]; // 可乐 -> 雪碧
arr[j+1] = temp; // 空瓶 -> 可乐
}
}
}
System.out.println(Arrays.toString(arr));
}
}
(5)插入数字
/**
- 需求:现在有一组数字:90 85 80 63 60 现在要求输入一个数字 并将之也插入到数组中,要求继续保持降序
- @author Charles
*
*/
public class Test3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 定义数组 存储数字
int[] arr = new int[6];
arr[0] = 90;
arr[1] = 85;
arr[2] = 80;
arr[3] = 63;
arr[4] = 60;
System.out.println("==============插入数字之前================");
for (int temp1 : arr) {
System.out.print(temp1+"\t");
}
System.out.println("\n================================");
System.out.print("请输入一个数字:");
int num = input.nextInt(); // 83
// 1.寻找插入的位置
int index = 5;
for(int i = 0; i < arr.length; i++) {
if(arr[i] < num) {
index = i;
break; // 找到位置之后 应该结束 因为后面的都是青铜
}
}
// 2.数据移位
for(int j = arr.length - 1; j > index; j--) {
// 将当前位置进行重新赋值 赋值为前一个值
arr[j] = arr[j-1];
}
// 3.插入数字
arr[index] = num;
System.out.println("==============插入数字之后================");
for(int temp2 : arr) {
System.out.print(temp2+"\t");
}
}
}
学习方法
数组的操作多数是操作下标,记住这个规律
(6)二分(拆半)查找法
步骤:1) 。 找到数组中间位置的值,并存放一个变量temp中
2). 需查找的值key,拿key和temp比较
3) . 如key > temp 则把数组中间位置作为下一次计算的起点位置 重复(1)和(2)
4) . 如key < temp则把数组中间位置作为下一次计算的终点位置 重复(1)和(2)和(3)
5) . 如key = temp 返回中间位置的下标(元素),完成查找
(7) 掌握Arrays数组工具类的使用
toString() 将数组内的元素转换为一个字符串
sort(); 将数组进行升序排序
copyOf(); 将数组内的元素复制到一个指定长度的新数组中
binarySearch(); 二分查找 前提:升序排序好 查找指定数据的索引
二 . 理解二维数组的应用
int[] arr = new int[4];
Java中是没有二维数组的(内存中的形式没有二维数组)!但是语法上有!
int[][] arr = new int[4][];
// 二维数组
// double[][] scores = new double[5][5];
// double[][] scores = new double[5][];
// double[][] scores = new double[][]{{},{}};
double[][] scores = {{1,2,3,4,5},{5,4,7,2,1},{1,3,5,4,9}};