java基础编程之--关于数组

关于数组

数组的概述

1.数组的理解:数组(Array),是多个相同类型数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

2.数组相关的概念:
①数组名
②元素
③角标、下标、索引
④数组的长度:元素的个数

3.数组的特点:

  • 1、数组是序排列的
  • 2、数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
  • 3、创建数组对象会在内存中开辟一整块连续的空间
  • 4、数组的长度一旦确定,就不能修改。

数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。

  1. 数组的分类:
    ① 照维数:一维数组、二维数组、。。。
    ② 照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组

  2. 一维数组的使用
    ① 一维数组的声明和初始化
    ② 如何调用数组的指定位置的元素
    ③ 如何获取数组的长度
    ④ 如何遍历数组
    ⑤ 数组元素的默认初始化值 :
    在这里插入图片描述按照数据类型的分类

数组元素是整型:0
数组元素是浮点型:0.0
数组元素是char型:0或’\u0000’,而非’0’
数组元素是boolean型:false
数组元素是引用数据类型:null

public class ArrayTest {
	 public static void main(String[] args) {
		//数组元素的默认初始化值
		//1.数组元素是整型
			int[] arr = new int[3];
			for(int i = 0;i < arr.length;i++){
				System.out.println(arr[i]);//输出三个0
			}
			System.out.println("**********");
			short[] arr1 = new short[3];
			for(int i = 0;i < arr1.length;i++){
				System.out.println(arr1[i]);//short属于基本数据类型所以遍历输出三个0
			}
			System.out.println("**********");
			//2.数组元素是浮点型
			float[] arr2 = new float[3];
			for(int i = 0;i < arr2.length;i++){
				System.out.println(arr2[i]);//输出三个0.0
			}
			System.out.println("**********");
			
			//3.数组元素是char型:
			char[] arr3 = new char[3];
			for(int i = 0;i < arr3.length;i++){
				System.out.println(arr3[i]);//遍历输出了三个空格
			}
			//4.数组元素是boolean型
			boolean[] arr4 = new boolean[5];
			System.out.println(arr4[0]);//输出false
	       
	        String name[]=new String[5];
	        System.out.println(name[0]);//String属于引用数据类型,所以输出null。
	        if(name[0]==null) {
	        	System.out.println("今天是2020年8月3日");
	        }
	}

}

⑥ 数组的内存解析 :

关于数据结构概述

数据结构:
1.数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
2.数据的存储结构:
线性表:顺序表(比如:数组)、链表、栈、队列
①数组 (Array)

  • 在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,
    数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

②栈 (Stack)

  • 栈是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。
    ③队列 (Queue)
  • 一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

④链表 (Linked List)

  • 一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:
    一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

⑤树 (Tree)

  • 树是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
    (1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)
    (2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
    (3)K中各结点,对关系N来说可以有m个后继(m>=0)。

⑥堆 (Heap)

  • 在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。

⑦图 (Graph)

  • 图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

⑧散列表 (Hash)

  • 若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此不需比较便可直接取得所查记录。称这个对应关系f为散列函(Hashfunction),按这个思想建立的表为散列表。

一维数组

当数组中每个元素都只带有一个下标时,称这样的数组为一维数组。
一维数组是由数字组成的以单纯的排序结构排列的结构单一的数组。一维数组是计算机程序中最基本的数组。

定义并用运算符new为之分配空间后,才可以引用数组中的每个元素;
数组元素的引用方式:数组名[数组元素下标]
数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[3*i];
数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 —>n-1;
如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]
每个数组都有一个属性length指明它的长度,例如:a.length 指明数组a的长 度(元素个数)

数组一旦初始化,其长度是不可变的
1.一维数组的声明与初始化
一维数组的声明方式: type var[] 或 type[] var;
例如:

int a[]; 
double b[]; 
String[] c; //引用类型变量数组

正确的方式:

int num;//声明
	num = 10;//初始化
	int id = 1001;//声明 + 初始化
			int[] str;//声明
	//1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
	str = new int[]{1,2,3,4};
	//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
	String[] names = new String[5];
 	int[] arr4 = {1,2,3,4,5};//类型推断
错误的方式:
//		int[] arr1 = new int[];
//		int[5] arr2 = new int[5];
//		int[] arr3 = new int[3]{1,2,3};

Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法
总结:数组一旦初始化完成,其长度就确定了。
2.一维数组元素的引用:通过角标的方式调用。
//数组的角标(或索引从0开始的,到数组的长度-1结束。
names[0] = “王一”;
names[1] = “王二”;
names[2] = “张三”;
names[3] = “李四”;
names[4] = “王五”;//charAt(0)
3.数组的属性:length
System.out.println(names.length);//5
System.out.println(str.length);//4

说明:
数组一旦初始化,其长度就是确定的。arr.length
数组长度一旦确定,就不可修改。
4.一维数组的遍历

for(int i = 0;i < names.length;i++){
	System.out.println(names[i]);
}

5.一维数组元素的默认初始化值
> 数组元素是整型:0

数组元素是浮点型:0.0
数组元素是char型:0或’\u0000’,而非’0’
数组元素是boolean型:false
数组元素是引用数据类型:null

int[] arr = new int[4];
		for(int i = 0;i < arr.length;i++){
			System.out.println(arr[i]);
		}

//输出 的默认值为0
对于基本数据类型而言,默认初始化值各有不同
对于引用数据类型而言,默认初始化值为null(注意与0不同!)

二维数组

  1. 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,
    类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。

  2. 如何理解二维数组?
    数组属于引用数据类型
    数组的元素也可以是引用数据类型
    一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组。

  3. 二维数组的声明与初始化
    正确的方式:

	int[] str = new int[]{1,2,3};//一维数组
		//静态初始化
		int[][] str1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
		//动态初始化1
		String[][] str2 = new String[3][2];
		//动态初始化2
		String[][] str3 = new String[3][];
	//也是正确的写法:
		int[] str4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
		int[] str5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断
错误的方式:
//		String[][] str4 = new String[][4];
//		String[4][3] str5 = new String[][];
//		int[][] str6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};
//也是正确的写法:
		int[] str4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
		int[] str5[] = {{1,2,3},{4,5},{6,7,8}};

3.如何调用二维数组元素:

System.out.println(str1[0][1]);//2
		System.out.println(str2[1][1]);//null
		
		str3[1] = new String[4];
		System.out.println(str3[1][0]);//null
	    System.out.println(str3[0]);//null

4.二维数组的属性:

System.out.println(str4.length);//3
	System.out.println(str4[0].length);//3
	System.out.println(str4[1].length);//4

5.遍历二维数组元素

   for(int i = 0;i < str4.length;i++){
		
		for(int j = 0;j < str4[i].length;j++){
			System.out.print(str4[i][j] + "  ");
		}
		System.out.println();
}

6.二维数组元素的默认初始化值

  • 规定:二维数组分为外层数组的元素,内层数组的元素
  •  int[][] str = new int[4][3];
    
  •  外层元素:str0],str[1]等
    
  •  内层元素:str[0][0],str[1][2]等
    

数组元素的默认初始化值 :
针对于初始化方式一:比如:int[][] str = new int[4][3];

  •  外层元素的初始化值为:地址值
    
  •  内层元素的初始化值为:与一维数组初始化情况相同 
    

针对于初始化方式二:比如:int[][] str = new int[4][];

  •  外层元素的初始化值为:null
    
  •  内层元素的初始化值为:不能调用,否则报错。
    
        int[][] str = new int[4][3];
		System.out.println(str[0]);//[I@15db9742   地址值
		System.out.println(str[0][0]);//0

以上就是我看视频学习和自己总结的知识点,如有不足之处,请大家指出改正,感谢每天进步的自己!加油!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值