Java基础-数组(五)
文章目录
- 1.数组的概述
- 2.数组声明创建
-
- 2.1数组的定义:
- 2.2理解数组
- 2.3创建与声明
- 2.4jvm内存分析
- 2.5三种初始化
-
- 2.5.1静态初始化
- 2.5.2动态初始化
- 2.5.3数组的默认初始化
- 2.6数组的四个基本特点
- 2.7数组的边界
- 3.数组使用
-
- 3.1 For-Each循环
- 3.2 数组作方法入参
- 3.3 数组作返回值
- 4.多维数组 (不常用,了解)
- 5.Arrays类(拓展)
- 6.稀疏数组(拓展)
-
- 6.1稀疏数组的介绍
1.数组的概述
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
- 其中,每一个数据称作一个数组的元素,每个数组元素可以通过一个下标来访问它们。
- 使用数组的原因:
(1)没有数组:存在多个变量,需要声明多个变量的名称,这些名称之间没有什么关系和规律。想访问所有的变量,就比较困难。
(2)有了数组:只需要有一个数组容器的名称,容器里面有通过数字表示的位置。位置的数字又有规律的。可以通过容器名称结合位置数字的方式,访问到某个变量。非常容易的访问所有的变量。通过有规律的索引,来访问没有规律的元素。
2.数组声明创建
2.1数组的定义:
元素的数据类型[] 数组名称 = new 元素的数据类型[数组容器的大小];
2.2理解数组
2.3创建与声明
public class ChuangJian_Daniel { public static void main(String[] args) { int [] array;//声明一个数组 array = new int[10];//创建一个数组 //int [] array = new int[10];//声明创建数组 array [0] = 0; array [1] = 1; array [2] = 2; array [3] = 3; array [4] = 4; array [5] = 5; System.out.println(array[3]); int sum = 0; for (int i = 0; i < array.length; i++) {//array.length 表示数组的长度 sum+=array[i]; } System.out.println("sum="+sum); }}
运行结果为:
2.4jvm内存分析
1、 jvm是执行java程序的容器,空间很大,需要划分不同的区域:不同的功能,需要使用不同特点的区域来完成.主要分为:栈内存、堆内存、方法区
2、栈内存:用于执行方法,每个方法单独的分配一段空间,称为栈帧,把给方法分配内存空间,形象的称为“进栈”。特点:先进后出
3、堆内存:用于存储数组、对象等数据量较大的数据。一般都是引用数据类型。
4、方法区:用于存储类的字节码对象,存储常量、存储静态变量
2.5三种初始化
2.5.1静态初始化
int [] a = {1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)};
2.5.2动态初始化
int[] a = new int[2];
a[0]=1;
a[1]=2;
2.5.3数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
public class ChuShiHua_Daniel { public static void main(String[] args) { //静态初始化 int [] num1 = {1,2,3,4,5,6}; System.out.println(num1[3]); //动态初始化 int[] num2 = new int[10]; num2[2] = 4; System.out.println(num2[2]); System.out.println(num2[3]);//默认初始化 }}
运行结果为:
2.6数组的四个基本特点
2.7数组的边界
3.数组使用
3.1 For-Each循环
public class ShuZuPuTong_Daniel { public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; //数组的遍历 for (int i = 0; i < arrays.length; i++) { System.out.println(arrays[i]); } //数组求和 int sum = 0; for (int i = 0; i < arrays.length ; i++) { sum+=arrays[i]; } System.out.println("sum="+sum); //数组求最大值 int max = arrays[0]; for (int i = 0; i < arrays.length; i++) { if(arrays[i] > max){ max = arrays[i]; } } System.out.println("最大值为:"+max); }}
运行结果为:
3.2 数组作方法入参
3.3 数组作返回值
public class FanZhuan_Daniel { public static void main(String[] args) { //数组的反转 int[] arr = {1,2,3,4,5,6}; System.out.println("反转前"); printArray(arr);//调用打印数组的方法 for(int i = 0,j = arr.length-1;i < j;i++,j-- ){//做数组的反转操作 int temp = arr[i];//交换数组中的值 arr[i] = arr[j]; arr[j] = temp; } System.out.println("反转后"); printArray(arr);//调用打印数组的方法 } //打印数组的方法 public static void printArray(int[] arr){ for(int i = 0;i < arr.length;i++){ System.out.print(arr[i]+" "); } System.out.println(); }}
运行结果为:
4.多维数组 (不常用,了解)
public class ErWei_Daniel { public static void main(String[] args) { int [][] arr = {{1,2,3},{3,4,5},{2,4},{2}}; for (int i = 0; i < arr.length; i++) { for (int j = 0; j <arr[i].length ; j++) { System.out.print(arr[i][j]+"\t"); } System.out.println(); } System.out.println("------------------"); System.out.println(arr[2][1]); }}
运行结果为:
5.Arrays类(拓展)
public class Arrays_Daniel { public static void main(String[] args) { int[] a = {12,222,3342,22,33,674557,33,2,264536}; //System.out.println(a);//[I@1b6d3586 // System.out.println(Arrays.toString(a));//Arrays的toString()方法//Arrays.sort(); //数组排序 printArray(a); } //也可以自己自定义数组方法 重复造轮子 public static void printArray(int[] a){ for (int i = 0; i < a.length; i++) { if(i == 0){ System.out.print("["); } if(i == a.length-1){ System.out.print(a[i]+"]"); }else{ System.out.print(a[i]+","); } } }}
运行结果为:
冒泡排序
public class MaoPao_Daniel { public static void main(String[] args) { int [] a = {12,1222,223,23,21243,2,21}; //冒泡排序 //1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置 //2.每一次比较,都会产生一个最大,或者最小的数字 //3.下一次可以少一次排序 //4.一次循环,直到结束 int[] sort = sort(a);//调用自己的排序,返回一个数组 System.out.println(Arrays.toString(sort)); } public static int[] sort(int[] array){ //临时变量 int temp = 0; boolean flag = true;//优化 //外层循环,判断我们这个要走多少次; for(int i = 0;i <array.length-1;i++){ for (int j = 0;j < array.length-1-i;j++){ if(array[j+1]<array[j]){ temp = array[j]; array[j] = array[j+1]; array[j+1] =temp; flag = true; } } //优化 if(flag == false){ break; } } return array; }}
运行结果为:
6.稀疏数组(拓展)
6.1稀疏数组的介绍
稀疏数组视频