学习路线>数据如何存储
变量
数组
类和对象
对象数组
集合 list set map…
IO流 文件操作 存储到本地
XML文件 操作本地数据更加方便(但是解析比较麻烦)
数据库(Database)
数据库的集群
数据库水平拆分。垂直拆分
HBase…大数据存储
…
变量的数据类型
基本数据类型:byte short int long dloat double char boolean
引用数据类型: 数组、累(String是类的一种)、接口、枚举
需求:计算一个班级30名学生的平局成绩
// 使用变量分别存储各个学生的成绩
double score1 = 10;
double score2 = 10;
double score3 = 10;
....
double score30 = 100;
// 求和
double sum = score1+.....+score30;
// 求平均
double avg = sum/30;
// 使用循环
for(int i =1;i<=30;i++){
syso("请输入")
double score = sc.nextDouble();
}
// 无法重复使用之前载入的数据
发现的问题: 变量使用时它只能使用基本数据类型,存储值只能存储简单地数据单一的数据。如果想同时存储更多地数据,他无法实现,同样关于变量的操作比较简单,我们需要寻找一种能够同时存储更多数据的,更加丰富的数据类型
数组: 一组数据、数据的组合
可以将有限个类型相同的变量集合命名
数组中的变量被称为数组的元素
它是一种引用数据类型 它的数据存储在JVM中的堆中,
基本数据变量一般都是存储在栈中
数组:
数据类型:还是进本数据类型
数组名(变量名):与普通变量命名规范相同
数组的长度(数组中存储了多少个变量)一个数组定义了长度就无法更改 (源代码更改除外)
数组的元素(多个变量)数组元素就涮不赋值也有默认值
数组的下标(索引)
语法:[] 在多种开发语言中都表示数组
数据类型[] 数组名 = new 数据类型[数组长度]
数据类型[] 数组名 ={元素1,元素2,.....}
// 创建一个数组
// 定义数组的两种语法
// 数据类型[] 数组名 = new 数据类型[数组长度]
int[] age = new int[5];
age[0] = 12;// 给数组添加元素
age[1] = 13;
...
// 数据类型[] 数组名 ={元素1,元素2,.....}
int[] age1 = {12,13,...};
数组存储数据的优化策略:
Scanner sc = new Scanner(System.in);
double[] scores = new double[5];\
for(int i=0;i<scores.length;i++){
System.out.println("请输入第"+(i+1)+"个数据");
scores[i] = sc.nextDouble();
}
获取数组中的所有数据(遍历)(更灵活)
// 遍历
// 定义数组
double[] scores= {90,80,70,60,50};
for(int i=0;i<scores.length;i++){
System.out.println(scores[i])
}
增强for 循环 (foreach)(正经的遍历使用)(迭代器)
// 定义数组
double[] scores= {90,80,70,60,50};
// 遍历
for(double score:scores){
System.out.println(score)
}
Scanner sc = new Scanner(System.in);
// 存储班级成绩
double scores[] = new double[5];
double total = 0;// 总成绩
// 循环输入成绩
for (int i=0;i<scores.length;i++) {
System.out.println("请输入第"+(i+1)+"位学生的成绩");
scores[i]=sc.nextInt();
}
// 遍历累加求和
/*for(int j=0;j
for(double score:scores) {
total +=score;
}
System.out.println("求和"+total);
// 求平均分
double avg = total/scores.length;
System.out.println("平均分"+avg);
Scanner sc = new Scanner(System.in);
// 存储班级成绩
double scores[] = new double[5];
double total = 0;// 总成绩
// 循环输入成绩
for (int i=0;i<scores.length;i++) {
System.out.println("请输入第"+(i+1)+"位学生的成绩");
scores[i]=sc.nextInt();
}
// 定义最大值 初始为数组第一个数
double max=scores[0];
// 定义最小值 初始为数组第一个数
double min=scores[0];
// 遍历
for(int i=0;i<scores.length;i++) {
// 判断下标为i的成级是否大于max
if(max<scores[i]) {
max=scores[i];// 如果大于则把当前值赋予max
}else if(min>scores[i]){// 判断下标为i的层级是否小于min
min=scores[i];// 如果小于则把当前值赋予min
}
}
// 控制台输出最大最小
System.out.println(max);
System.out.println(min);
再次提及数据类型
基本数据类型存储数据
java中为了更方便的使用数组定义了数组工具类 Arrays
冒泡排序==>实现排序功能的一种算法
冒泡排序算法的口诀
相邻元素作比较,两两比较小靠前
冒泡排序:外层循环n-1 内层循环n-1-i
// 冒泡排序
int[] arr = {99,77,88,92,30};
for(int i=0;i<arr.length-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;
}
}
}
常见的内部排序算法有八个
需求:存储5个版各5名同学的成绩:
double[] scores1 = new double[5];
double[] scores2 = new double[5];
double[] scores3 = new double[5];
double[] scores4 = new double[5];
double[] scores5 = new double[5];
希望交5个班的成绩存储到一起方便进行维护
多维数组:在java的内存模型并不纯在多维数组,但是语法上支持。以为这本质上还是一个一维数组
// 语法
int[][] arr = new int[2][3];
int[][] arr = new int[2][];
int[][] arr = {{1,2},{1,2}};