一维数组 | 二维数组 | 内存解析


文章链接
Java语法https://blog.csdn.net/weixin_45606067/article/details/107049186
一维数组与二维数组、内存解析https://blog.csdn.net/weixin_45606067/article/details/107049178
面向对象(1/3)类和对象https://blog.csdn.net/weixin_45606067/article/details/108234276
面向对象(2/3)封装性、继承性、多态性https://blog.csdn.net/weixin_45606067/article/details/108234328
面向对象(3/3)抽象类、接口、内部类、代码块https://blog.csdn.net/weixin_45606067/article/details/108258152
异常处理待更新
多线程(1/2)https://blog.csdn.net/weixin_45606067/article/details/107067785
多线程(2/2)https://blog.csdn.net/weixin_45606067/article/details/107067857
常用类https://blog.csdn.net/weixin_45606067/article/details/108283203
枚举与注解待更新
集合(1/5)Collection、Iterator、增强forhttps://blog.csdn.net/weixin_45606067/article/details/107046876
集合(2/5)List、ArrayList、LinkedList、Vector的底层源码https://blog.csdn.net/weixin_45606067/article/details/107069742
集合(3/5)set、HashSet、LinkedHashSet、TreeSet的底层源码
集合(4/5)Map、HashMap底层原理分析https://blog.csdn.net/weixin_45606067/article/details/107042949
集合(5/5)LinkHashMap、TreeMap、Properties、Collections工具类https://blog.csdn.net/weixin_45606067/article/details/107069691
泛型与Filehttps://blog.csdn.net/weixin_45606067/article/details/107124099
IO流与网络编程https://blog.csdn.net/weixin_45606067/article/details/107143670
反射机制待更新
Java8新特性https://blog.csdn.net/weixin_45606067/article/details/107280823
Java9/10/11新特性待更新

一、数组

1.数组的理解:

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

2.数组相关的概念:

数组名
元素
角标、下标、索引
数组的长度:元素的个数

3.数组的特点:

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

4.数组的分类:

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

5.数据结构:

1.数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
2.数据的存储结构:

  • 线性表:顺序表(比如:数组)、链表、栈、队列
  • 树形结构:二叉树
  • 图形结构
  • 算法
  • 排序算法
  • 搜索算法

二、一维数组

1.一维数组的声明与初始化

int num;//声明
num=10;//初始化
int id = 1001;//声明+初始化

int[] ids;//声明
//1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行
ids = new int[]{1001,1002,1003,1004};
//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5];

int[] arr4 = {1,2,3,4,5};//类型推断

2.一维数组元素的引用

通过角标的方式调用。
数组的角标(或索引从0开始的,到数组的长度-1结束)
name[0]= “zhangsan”;
name[1]= “lisi”;
name[2]= “wangsu”;
name[3]= “sunliu”;
name[4]= “jerry”;//charAt(0)

3.数组的属性:length

System.out.println(names.length());
数组一旦初始化,其长度就是确定的,arr.length
数组长度一旦确定,就不可改变;

4.一维数组的遍历
for(int i =0;i<names.length;i++){
	System.out.println(name[i]);
}
5.一维数组元素的默认初始化值

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

6.一维数组的内存解析

在这里插入图片描述

三、二维数组

1.如何理解二维数组

数组属于引用数据类型。
数组的元素可以是引用数据类型。
一个一维数组A的元素如果还是一个一维数组类型的,则次数组A称为二维数组。

2.二维数组的声明与初始化
int[] arr =new int[]{1,2,3};//一维数组
//静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化1
int[][] arr2 = new int[3][2];
//动态初始化2
int[][] arr3 = new int[3][];
//也是正确写法
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};
3.如何调用二维数组元素
System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//null
arr3[1] = new String[4];
System.out.println(arr3[1][0]);
System.out.println(arr3[0]);
4.二维数组的属性

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

5.遍历二维数组元素
for (int i = 0; i < arr4.length; i++) {
	for (int j = 0; j < arr4[i].length; j++) {
		System.out.println(arr4[i][j]);
	}
}
6.二维数组元素的默认初始化值

规定:二维数组分为外层数组的元素,内层数组的元素

int[][] arr = new int[4][3];
外层元素: arr[0],arr[1]等
内层元素: arr[0][1],arr[1][2]等

数组元素的默认初始化值
针对于初始化方式一:比如: int[][] arr = new int[4][3];
	外层元素的初始化值为:地址值
	内层元素的初始化值为:与一维数组初始化情况相同
针对于初始化方式二:比如: int[][] arr = new int[4][];
	外层元素的初始化值为: null
	内层元素的初始化值为:不能调用,否则报错。
7.二维数组的内存结构

在这里插入图片描述

四、数组中设计的常见算法

1.数组元素的赋值(杨辉三角、回形数等)

2.求数值型数组中元素的最大值、最小值、平均数、总和等

3.数组的复制、反转、查询(线性查找、二分查找)

4.数组元素的排序算法(十大排序)

  • 选择排序
    • 直接排序、堆排序
  • 交换排序
    • 冒泡排序、快速排序
  • 插入排序
    • 直接插入排序、折半插入排序,Shell排序
  • 归并排序
  • 桶式排序
  • 基数排序

排序算法性能比较
在这里插入图片描述

五、Arrays工具类的使用

java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法

public static void main(String[] args){
	//判断两个数组是否相等
	int[] arr1 = new int[] { 1,2,3,4 };
	int[] arr2 = new int[] { 1,3,2,4 };
	System.out.println(Arrays.equals(a, b));//false

	//输出数组信息
	System.out.println(Arrays.toString(arr1));
	
	//将指定值填充到数组之中
	Arrays.fill(arr1,10);
	System.out.println(Arrays.toString(arr1));//[10,10,10,10]
	
	//对数组进行排序
	Arrays.sort(arr2);
	System.out.println(Arrays.toString(arr2));//[1,2,3,4]
	
	//二分法查找
	int arr3 = new int[]{-98,-34,2,34,66,79,106,210,333};
	int index = Arrays.binarySearch(arr3,210);
	System.out.println(index);
}

六、数组中的常见异常

一旦程序出现错误,程序就终止。


public static void main(String[] args){
	//1 数组角标越界的异常:ArrayIndexOutOfBoundsException
	int[] arr =new int[]{1,2,3,4,5};
	for(int i = 0;i<= arr.length;i++){
		System.out.println(arr[i]);
	}
  	
	System.out.println(arr[-1]);
  
	//2 空指针异常:NullPointerException
	//情况一:
	int[] arr1 = new int[]{1,2,3};
	arr1 = null;
	System.out.println(arr1[0]);
	
	//情况二:
	int[][] arr2 = new int[4][];
	System.out.println(arr2[0][0]);
	
	//情况三:
	String[] arr3 = new String[]{"AA","BB","CC"};
	arr3[0] = null;
	System.out.println(arr3[0].toString());
}

好了,我亲爱的读者朋友,以上就是本文的全部内容了!!!

觉得有点用记得给我点赞哦!

通过坚持不懈地学习,持续不断地输出,你的编程基本功算得上是突飞猛进。

为了帮助更多的程序员,专注于分享有趣的 Java 技术编程和有益的程序人生。一开始,阅读量寥寥无几,关注人数更是少得可怜。但随自己的不断努力,阅读量和关注人都在猛烈攀升。

绝对不容错过,期待与你的不期而遇。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值