003-数据结构-线性结构-数组
一、概述
数组就是一段连续的内存,即使在物理内存中不是连续的,在逻辑上肯定是连续的。
在java 中,数组是最基础的一种数据结构。
数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。
数组中的元素可以是任何类型,包括基本类型和引用类型。
1.1、数组创建
int[] arr= new int[5]; int arr2[]= new int[5]; int[] arr3= {1,2,3,4};
1.2、数组元素的使用
arr[1],arr[i],arr[6*i]
下标赋值
arr[1]=1;
1.3、数组的拷贝
1、使用java.lang.system类的静态方法
public static void arrayCopy(object src,int srcPos,object dest,int destPos,int length){}
2、可以用于数组src从第srcPos项元素开始的length个元素拷贝到目标数组从destPos项开始的lenght个元素。
3、如果源数据数目超过目标数组边界会抛出IndexOutOfBoundsException异常。
int[] arr= new int[5]; int[] arr3= {1,2,3,4}; System.arraycopy(arr3,0,arr,0,arr3.length); for (int i = 0; i < arr.length; i++) { int i1 = arr[i]; System.out.print(arr[i]+" "); }
二、数组的分类以及实现
2.1、无序数组
代码地址: NoOrderArray
无序数组的优点:插入快,如果知道下标,可以很快的存取
无序数组的缺点:查找慢,删除慢,大小固定。
2.2、有序数组
有序数组就是指数组中的元素是按一定规则排列的,其好处就是在根据元素值查找时可以是使用二分查找,查找效率要比无序数组高很多,在数据量很大时更加明显。当然缺点也显而易见,当插入一个元素时,首先要判断该元素应该插入的下标,然后对该下标之后的所有元素后移一位,才能进行插入,这无疑增加了很大的开销。
因此,有序数组适用于查找频繁,而插入、删除操作较少的情况
有序数组的封装类如下,为了方便,我们依然假设数组中是没有重复值的,并且数据是按照由小到大的顺序排列的
代码地址: OrderArray
有序数组最大的优势就是可以提高查找元素的效率,在上例中,find方法使用了二分查找法
有序数组的优点:查找效率高
有序数组的缺点:删除和插入慢,大小固定
2.3、动态扩容数组
代码地址: DynamicArray