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

猜你喜欢

转载自www.cnblogs.com/bjlhx/p/10745109.html