Day07
数组的常见概念:
数组:是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
数组:长度从零开始计算。
链表:不连续而数组是连续的
1)数组是有序排列的
2)数组属于引用数据类型的变量。数组元素,既可以是基本数据类型,也可以是引用数据类型。
3)创建数组对象会在内存中开辟一整块连续的空间
4)数组的长度:数组的长度一但确定不可以修改。
4. 数组的分类:
1.按照维数: 一维数组、二维数组、。。。
2.按照数组元素的类型:基本数组类型元素的数组、引用数据类型元素的数组
5. 一维数组的使用
1)一维数组的声明和初始化
2)如何调用数组的指定位置的元素
3)如何获取数组的长度
4)如何遍历数组
5)数组元素的默认初始化值
6)数组的内存解析
//角标:相当于每个人的名字的索引
数组元素的默认初始化值:
> 数组整型初始化为:0
> 浮点类型初始化为:0.0
> 数组元素是char型数组元素是char型: 0 或 '\u0000',而非'0'
> 数组元素是boolean型:false
> 数组元素是引用数据类型
6.数组内存的的使用:
Jvm:java虚拟机
int[] arr = new int[]{1,2,3};
栈:(stack):局部变量 arr
堆:(heap) new出来的结构:对象、数组: 创建arr地址:0x为16进制的地址值
方法区-
--常量池: 放new的数据
--静态域:
--------------------数组在Java虚拟机中的情况
JVM(Java虚拟机):
int[] arr = new int[]{1,2,3};
栈(存放局部变量):arr
堆(创造栈中指定的数据):数组:都是0x十六进制:arr:0x12b:{1,2,3};
以上是最标准的数组规则;
以下我个人总结数组概念:
1.数组的功能?
数组概念:相当于放羊,将10只羊围到一个羊圈。
想吃羊:需要从羊圈中取一只羊。
2.数组的规则?我认为学会规则才是使用数组的方式
①数组本身是引用类型。(这个很重要)
②数组是一块连续的内存空间。
3.数组的下标是什么?
数组下标是用来引用数组的方式。
相当于c语言中的指针而java中叫引用
角标:如何调用数组的指定位置元素:通过角标的方式调用。
数组的角标(或索引)从0开始的,到数组的长度-1结束。
String[] arr = new String[5];
arr [0] = "张三";
arr [1] = "李四";
arr [2] = "王五";
arr [3] = "赵六";
arr [4] = "钱七";
//arr [5] = "王八";//最大角标==[5 - 1 = 4];
/*
数组使用规则:
①.静态赋值、动态长度
②.角标:从0开始,到数组长度-1结束 int[] arr = new int[5] == [5 - 1 = 4];
③.int[] ids;//声明
//1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1001,1002,1003};//静态指写好的
//1.2动态初始化:数组的初始化和数组元素额赋值操作分开进行
String[] names = new String[5];//动态需要自己写
④.数组最重要的是角标,学会使用角标就学会了数组的使用。
⑤.int类型:0 float类型:0.0 char类型: ;char=0但是看不见。boolean布尔=false;布尔类型肯定是false;
*/
/*
5.错误的数组格式?
一维数组(错误):
//int[] arr1 = new int[];//第一个问题在:既没有赋值{1001,1002,1003}也没有写明长度[5];
//int[5] arr2 = new int[5];//第二个问题:前面内容写[5]错误x,应该放到后面[5]
//int[] arr3 = new int[3]{1,2,3};//第三个问题:动态长度和静态赋值同时写入
*/
6.正确的数组格式?
一维数组的标准格式:
int[] ids;//声明
//1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1001,1002,1003};//静态指写好的
//1.2动态初始化:数组的初始化和数组元素额赋值操作分开进行
String[] names = new String[5];//动态需要自己写
数组的使用:栈中存引用的地址,堆中存每个位置的地址,常量池中存数据
int [] arr = new int[4];
for(int i = 0;i < arr.length;i++){
System.out.println(arr[i]);
}
int:0
shrot arr1 = new shrot[5];
short:0
float arr2 = new float[5];
float:0.0
char arr3 = new char[5];
char:0 或 '\u000'意思一样,而非'0'
boolean arr4 = new boolean[5];
数组元素是boolean型:false
String[] arr5 = new String[5];
if(arr5[0] == "null"){
System.out.println("北京天气不错!");
}
数组元素引用数据类型:null而不是"null"
一维数组内存解析:讲解整型类型和字符串类型的使用方式。
2. 从键盘读入学生成绩,找出最高分,
/*
并输出学生成绩等级。
成绩>=最高分-10 等级为’A’
成绩>=最高分-20 等级为’B’
成绩>=最高分-30 等级为’C’
其余 等级为’D’
*/
import java.util.Scanner;
public class ArrayDemo1 {
public static void main(String[] args) {
//1.使用Scanner,读取学生个数:
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生人数:");
int nmuber = scanner.nextInt();
//2.创建数组,存储学生成绩:动态初始化,分清楚什么是静态和动态
int[] scores = new int[number];
//3.给数组中的元素赋值
System.out.println("请输入" + number + "个学生成绩:");
for (int i = 0;i < scores;i++){
scores[i] = scanner.nextInt();
}
//4.获取数组中的元素的最大值:最高分
int maxScores = 0;
for(int i = 0;i < scores.length;i++){
if(maxScore < scores[i]){
maxScore = scores[i];
}
}
//5.根据每个学生成绩与最高分的差值,得到每个学生的等级,并输出等级
char level;
for(int i = 0;i < scores.length;i++){
if(maxScore scores[i] <= 10){
level = 'A';
}else if(maxScore - scores[i] <= 20){
level = 'B'
}else if(maxScore - scores[i] <= 30){
level = 'C';
}else{
level = 'D';
}
System.out.println("student" + i + "score is" + scores[i] + "grade is"+ level);
}
}
}
二维数组的使用:
int[][] arr1 = new int[3][2];//解析一下:前面的[3]代表3个内存{0,0,0};后面[2]代表,三个内存中每个有两个内存{0,0}动态长度;
int[][] arr3 = new int[4][];//这种可以自己设置内存几个
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};//静态赋值就是指:3个内存,空间自己定义为3,2,3;
以上是二维数组在内存中的调用方式
二维数组的格式:
int[] arr = new int[]{1,2,3};//一维数组
//静态初始化1
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化2
String[][] arr2 = new String[3][2];
//动态初始化3
String[][] arr3 = new String[3][];
//错误的写法
//int[] ids;
//ids = new int[]{1001,1002,1003,1004};
//String[][] arr4 = new String[][4];//要全部定义
//String[4][3] arr5 = new String[][];//数组的一二维不能写到前面
//int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};//数组写的值和给的数据不一样
//标准写法
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//也是正确的写法
int[] arr6 = {1,2,3,4,5};
//也是正确的写法:
int[] arr4[] = new int[][]{{1,2,3},{4,5},{6,7,8}};
int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};
//2.如何调用数组的指定位置的元素
System.out.println(arr1[0][1]);//2
System.out.println(arr[1][1]);//null
System.out.println(arr3[1][0]);
//3.获取数组的长度
System.out.println(arr4.length);
二维数组的多种使用方式:
int[] arr4[] = new int[][]{{1,2,3},{4,5},{6,7,8}};
System.out.println(arr4.length);
System.out.println(arr4[0].length);
System.out.println(arr4[1].length);
package com.atguigu.exe;
/*
* 二维数组的使用
*
* 1.理解:
* 对于二维数组的理解,我们可以看成是一维数组
array1又作为另一个一维数组array2的元素而存
在。其实,从数组底层的运行机制来看,其实没
有多维数组。
2. 二维数组的使用:
1.二维数组的声明和初始化
2.如何调用数组的指定位置的元素
3.如何获取数组的长度
4.如何遍历数组
5.数组元素的默认初始化值:
针对于初始化方式一:比如:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
针对于初始化方式二:比如:int[][] arr = new int[4][];
外层元素的初始化值为: null
内层元素的初始化值为:不能调用,否则报错。
6.数组的内存解析
二维数组也是在:栈中存储值地址引用,堆进行创建数组并且存储每个位置的地址,常量池: 放new的数据
*/
public class ArrayTest2 {
public static void main(String[] args) {
int [][] arr = new int[4][3];
System.out.print(arr[0]);//
System.out.println(arr[0][0]);//
System.out.println(arr);//[[
System.out.println("********************");
float[][] arr1 = new float[4][3];
System.out.println(arr[0]);//地址值
System.out.println(arr[0][0]);//0.0
}
}
总结完成,有错误的地方请指正,我会持续更新自己学习Java的过程并且每天学习完进行总结,有不足的地方请(您/你)给出宝贵意见
浙公网安备 33010602011771号