JAVA入门第四课——数组

JAVA入门第四课——数组

数组【难点-引用数据类型<堆>】

学习路线>数据如何存储

  • 变量

  • 数组

  • 类和对象

  • 对象数组

  • 集合 list set map…

  • IO流 文件操作 存储到本地

  • XML文件 操作本地数据更加方便(但是解析比较麻烦)

  • 数据库(Database)

    • RDB: MySQL、Oracle、PostgreSQL、SQLlite
    • NoSQL: Redis、MongoDB、Memcached
  • 数据库的集群

  • 数据库水平拆分。垂直拆分

  • HBase…大数据存储

变量的数据类型

基本数据类型:byte short int long dloat double char boolean

引用数据类型: 数组、累(String是类的一种)、接口、枚举

1. 理解数组的作用

需求:计算一个班级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()}
// 无法重复使用之前载入的数据

发现的问题: 变量使用时它只能使用基本数据类型,存储值只能存储简单地数据单一的数据。如果想同时存储更多地数据,他无法实现,同样关于变量的操作比较简单,我们需要寻找一种能够同时存储更多数据的,更加丰富的数据类型

2. 掌握数组的定义

数组: 一组数据、数据的组合

可以将有限个类型相同的变量集合命名

数组中的变量被称为数组的元素

它是一种引用数据类型 它的数据存储在JVM中的堆中

基本数据变量一般都是存储在栈中

3. 掌握数组的基本使用

数组:

  • 数据类型:还是进本数据类型

  • 数组名(变量名):与普通变量命名规范相同

  • 数组的长度(数组中存储了多少个变量)一个数组定义了长度就无法更改 (源代码更改除外)

  • 数组的元素(多个变量)数组元素就涮不赋值也有默认值

    • byte short int long:0
    • float double:0.0
    • boolean:false
    • char:\U0000 一个空格
    • String等引用数据类型默认值为:null(表示没有引用)
  • 数组的下标(索引)

语法:[] 在多种开发语言中都表示数组

数据类型[] 数组名 = 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)
}

4. 掌握数组的常用操作

4.1 求一个班的总成绩和平均分

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);

4.1 求最大最小值

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);		

5.引用数据类型的名称来源【初识-堆-难点】

再次提及数据类型

  • 基本数据类型:
    • byte short int long float double boolean char
    • 数据存储在栈中(栈中数据线程不共享 独立的)
  • 引用数据类型:数组 类(String就是一个类) 接口 枚举
    • 数据存储在堆中(堆中数据线程共享)为了更好的利用数据而提出的概念

基本数据类型存储数据

JVM内存模型
JAVA入门第四课——数组_第1张图片

虚拟机栈(stack)
JAVA入门第四课——数组_第2张图片

引用数据类型存储数据:(堆)
JAVA入门第四课——数组_第3张图片

6.数组工具类Arrays

java中为了更方便的使用数组定义了数组工具类 Arrays

  • toString(array[] arr):数组中数据元素以字符串的方式返回
  • sort(array[] arr):使用快速排序算法为数组内的元素进行升序排序
  • binarySearch:初学者知道此方法 目前不做过多了解
  • equals(array[] arr1,array[] arr2):判断两个数组是否相等,如果大小相同并且下标相同的元素都对应相等,n那么结果会返回以个 true

总结

  • Arrays 类提供的方法能很方便的帮助我们去操作数组,在程序中会大量使用数组,所以对于数组的常用操作方法应该掌握
  • 这里没有写出来的方法 请自行查看JAVA API 文档

7.掌握冒泡排序【难点】

7.1原理和口诀

冒泡排序==>实现排序功能的一种算法

冒泡排序算法的口诀

相邻元素作比较,两两比较小靠前

冒泡排序:外层循环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;
        }
    }
}

7.2八大排序

常见的内部排序算法有八个

  • 插入排序
  • 希尔排序
  • 选择排序
  • 冒泡排序:本次理解学习内容
  • 归并排序
  • 快速排序
  • 堆排序
  • 基数排序

8.多维数组(二维数组)

需求:存储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}};

你可能感兴趣的:(JAVA入门第四课——数组)