数组:
由于单一变量只能存储一个数据,如果数据多了,其变量名变得麻烦
用数据可以存储上很多相同的数据
数据结构:按照什么样的结构来组织数据
原因:Cpu使用这些数据的时候能够更好的存储,读取和操作数据
分类:
物理数据结构:数据在内存中的或者在外存中的真实的存储结构不需要程序员关注
逻辑数据结构:人们按照某种想象的逻辑来组织数据的结构
JAVA开发人员更多的关注逻辑结构
jvm能够识别逻辑结构
数组就是人们想象出来的一种逻辑结构
这种逻辑结构要存储到内存中
由JVM来控制,程序员只需要关注数组的逻辑结构用法即可
数组的特点:
数组是一组数据的结合体
-必须是同一类型的多个数据(具体个数由程序员根据需求来定)
-在内存中必须是连续的空间(由JVM控制 )
数组的优缺点:
优点:存储同一类型的多个数据
缺点:不能存储不同类型的数据,
数组申请完内存空间后不能动态增长空间
数组的使用:
- 1.定义数组(声明数组)
语法:
数据类型[] 数组名称; Int[] aa;
数据类型 数组名称[];//不建议 Int aa[];
说明:
数据类型:所有的Java中的任何已知类型(八种基本数据类型,类类型)
[]:推荐放在数据类型的后面,数组名称的前面
- 2.给数组申请内存空间(堆空间)
数组申请内存空间(堆内存)
先声明数组 int[] aa;//此时没有申请堆空间
给数组申请内存空间,且给默认初值 aa = new int[5];
能使用的数组元素有5个,每个数组元素占用4个字节空间且每个数组元素初值是0
- 3.给数组元素赋初值
如果没有明确给赋初值,则按照数据类型来给默认值
数字类型(int float short double byte long) 默认值0
字符型默认 \u0000
对象类型 默认null
可以复制aa[0] = 100;
也可以使用for循环或者增强for循环复制
- 4.使用数组中的数据
数组名称[下标索引] 用来取数元素中的数据
- 5.获取数组的长度
int length = 数组的名称.length;
比如: int[] ages = {20,22,30,35};
ages.length;//4
- 6.数组的排序
可以排序算法:
冒泡排序(必备技能)
插入排序
快速排序
….
也可以使用java.util.Arrays.sort(要排序的数组名称);会对数组进行升序排序
- 7.数组的复制
使用System.arraycopy()方法可以实现数组的复制
方法的定义:
public static void arraycopy(Object src,int srcpos,Object destint destops,int length);
方法说明:
src:源数组
srcpos:源数组中的起始位置
dest:目标数组
destpos:目标数组中的起始位置
length:要复制的数组元素的数量比如 int[] a = new int[]{1,2,3,4,5} int[] a1 = new int[8]; System.arraycopy(a,1,a1,0,4) 结果: a1数组中的内容:2,3,4,5,0,0,0,0
使用java.util.Arrays类中的copyOf方法对数组进项复制
方法的定义:
类型[] newArrayName = Arrays.copyOf(类型[] original,int newLength);
特点:
生成的新数组是源数组的副本
newLength小于源数组,则进行截取
newLength大于源数组,则用0或null进行填充
所产生的新数组可以大于源数组的长度,属于数组扩容,
所产生的新数组可以小于源数组的长度,属于数组缩容比如: int[] a = {1,2,3,4,5}; int[] a1 = Arrays.copyOf(a,6); 结果: a1数组中的内容:1,2,3,4,5,0
- 8.二维数组
语法:
数据类型[][] 二维数组名称 = new 数据类型[行数][列数];
比如:
int[][] a = new int[3][4];//声明数组并在堆空间中申请12个整形空间
a[0] a[0][0] a[0][1] a[0][2] a[0][3]
a[1] a[1][0] a[1][1] a[1][2] a[1][3]
a[2] a[2][0] a[2][1] a[2][2] a[2][3]
二维数组实际上是由多个一维数组组成
实际上上面的二维数组是由a[0] a[1] a[2]三个一维数组组成的