一、动态数组
动态数组就是在数组的基础上增加了一个可以根据元素的个数动态调整数组大小的功能(用类实现)
我们之前用的数组最大的问题就在于数组长度定长,一旦一个数组在定义时确定长度之后,使用过程中无法改变长度。
Java 中提供的数组都是静态数组 int[] 、char []、long []…(定义之后无法改变长度),需要我们自己定义一个类,拓展基础数组的功能。此时、对外部来说,他已经不是一个数组了,而是一个类,创建这个“变长数组”相当于创建对象。
思想:
先创建一个类MyArray、在这个类中,定义一个private修饰的整型全局数组 private int [] data(private是为了让外界不可见)、再定义一个私有的整型全局变量private int size(表示这个私有数组已经存有数据的长度、另外、因为是全局变量、size有初始值 0 )。
为什么:size 表示私有数组已经存有数据的长度?
因为当我们存储时、data.length 不一定会存满、而是通过我们自己定义的一个变量,size来表示我们下一个期待存入数据的位置。size-1 索引代表的是最后一个元素。
所以、size 的值 即代表 数组的有效长度。
接着当我们创建这个类的一个对象时候、肯定要给动态数组分配一个初始空间吧、所以我们要定义一个有参的构造方法public MyArray( int num )、传入一个整型变量 num ,传入的参数作为初始的数组的长度。即this.data = new int [num];。当然,也可以再定义一个无参的构造方法public MyArray()、让这个无参的方法去调用这个有参的方法、只需要在调用时传入一个固定值即可、因为是无参调用有参、即this( 10 );、(这代表当我们使用无参构造方法创建一个MyArray类的对象时,默认开辟的整型数组大小为 10)。
二、增加
①add(int val)——》 在当前数组末尾添加元素
②addIndex(int index , int val )——》向当前动态数组中索引为index位置插入一个新元素
扩容:Arrays.copyOf(oldArr , newArrlen );可以把旧数组的所有内容搬到新数组,新数组的长度为规定长度。
三、删除
① public int remove (int index); 删除索引对应的元素,返回删除前的元素值
② public int removeFirst (); 删除数组的头元素
③ public int removeLast (); 删除数组的尾元素
④ public boolean removeByvalueOnce (int val ); 删除数中第一个值为val的元素,返回是否删除成功
四、查找
① public int getByValue (int index); 查询当前数组中第一个值为val的元素索引
②public boolean contains ( int val ); 查询动态数组中是否包含值为val的元素,返回布尔值
③public int get (int index ); 查询当前动态数组中索引为index的元素值
五、修改
①public int set (int index ,int newVal );修改index位置元素为新的值newVal,返回修改前的值
②public boolean set (int oldVal , int newVal); 修改第一个值位oldVal的元素,更改为新的值newVal,返回是否修改成功。