前言
今天有点无聊,写了一个自定义数组,里边主要实现很多js中数组的方法,例如:排序、数组连接、删除、剪切。算是加深对java的一些基础操作的印象。
代码/**
* @Auther dbc
* @Date 2020/9/5 22:03
* 自定义数组,数组元素为Object类
* 构造方法:
* MyArrayList() 初始化数组,长度为0
* MyArrayList(int size) 创建长度为size的数组
* MyArrayList(Object... objects) 初始化即加入一些元素
* 主要方法:
* String join() 方法用于根据分隔符把数组中的所有元素放入一个字符串,默认分隔符为","逗号.
* String join(String separator) example: 元素为0,1,2,3的数组 使用join("-")得到:0-1-2-3
* String toString() 得到数组字符串形式
* boolean add(int index,Object o) 在指定索引后增加元素
* void add(Object... objects) 在数组末尾添加元素
* Object pop() 删除并返回数组最后一个元素
* MyArrayList splice(int index,int length) 在原数组从索引index开始剪切length长度个元素,返回剪切后的新的数组
* MyArrayList update(int index,Object o) 修改指定索引的元素
* Object shift() 删除并返回数组的第一个元素
* void unShift(Object... objects) 在数组开头添加元素
* MyArrayList slice(int start,int end) 方法可从已有的数组中返回选定的元素
* void sortAsc() 对数组进行升序排序(选择排序) 前提:数组元素均为Integer、Double、Float中的一种
* void sortDesc() 对数组进行降序排序(冒泡排序) 前提:数组元素均为Integer、Double、Float中的一种
* MyArrayList concat(MyArrayList... allList) 方法用于连接两个或多个数组(该方法不会改变现有的数组)
* void reverse() 颠倒数组中的元素
* Object charAt(int index) 获取索引index处的元素
* int indexOf(Object o,int startIndex) 从startIndex开始向后获取某个元素在数组的索引,没有则返回-1
* int lastIndexOf(Object o,int startIndex) 从startIndex开始向前获取某个元素在数组的索引,没有则返回-1
*
*/
public class MyArrayList {
private Object[] elementData;//元素
private int size;//数组长度
private static final float DEFAULT_EXPAND_FACTOR = 0.75f;//扩容因子
private static final float DEFAULT_NARROW_FACTOR = 0.5f;//缩小容量的因子
private static final int MAXIMUM_CAPACITY = 1 << 30;//最大容量
private static String joinSeparator =","; //join方法默认的分隔符
/**
* 从startIndex开始向前获取某个元素在数组的索引,没有则返回-1
* @param o
* @param startIndex
* @return
*/
public int lastIndexOf(Object o,int startIndex){
if(startIndex<0) startIndex=0;
if(startIndex>=size) startIndex=size-1;
for(