ArrayList相对于LinkedList来说,在操作上就容易理解多了,毕竟数组的操作都是针对于索引。
- 添加元素方法
/**
*
* version:2. 添加元素的时候,在要添加的元素即将超过当前数组的长度的时候,自动扩容,扩容机制 length*2;
* @param obj
*/
public void add(Object obj){
//version2:自动扩容
//1。先判断数组长度是否大于当前元素个数,如果是,就扩容再添加元素
if(arr.length>size){
arr = Arrays.copyOf(arr,arr.length*2);
}
//2.如果当前能够装下元素,直接添加元素
//添加元素,就是将该数组指定索引处元素赋值
arr[size] = obj;
//元素个数+1
size++;
}
- 重写toString,打印对象就是将对象中所有的元素打印指定格式:
[值1,值2,值3,值4…]
/**
*
* version1. 显示所有元素,包括没有赋值的数组中元素
* version2. 只显示有元素的 =》size个
*
*/
@Override
public String toString() {
//1.创建一个新数组,元素的个数是size个
Object[] newArr = new Object[size];
//2.将源数组所有赋值的元素复制进有新数组
System.arraycopy(arr, 0, newArr, 0, size);
//3.将新数组的转换字符串形式
String str = Arrays.toString(newArr);
return str;
}
- 返回当前数组元素个数
/**
*
* @return
*/
public int size(){
return size;
}
- 查询指定索引的元素
/**
*
* @param index
* @return
*/
public Object searchElementByIndex(int index){
//1.查看当前index是否在当前数组的length表示范围之内
checkIndex(index);
return arr[index];
}
- 查询指定元素是否存在,如果存在,返回第一个出现的索引,如果不存在,返回-1
/**
*
* @param obj
* @return
*/
public int searchIndexByElement(Object obj){
//1.判断当前obj合法性,即非空校验,如果是null,则用==比较,否则根据引用类型的特点应该用equals比较
if(obj == null){
//遍历数组
for (int i = 0; i < size; i++) {
if(arr[i] == obj){
return i;
}
}
}else{
for (int i = 0; i < arr.length; i++) {
if(obj.equals(arr[i])){
return i;
}
}
}
//找不到
return -1;
}
- 检查索引的合法性 =>由于大量的适用于该功能,所以抽象成一个方法
/**
*
* @param index
*/
public void checkIndex(int index){
//如果索引小于0或大于元素个数-1
try {
if(index<0 || index>size-1){
System.out.println("您输入的索引有误!"+"当前输入值:"+index);
}
} catch (ArrayIndexOutOfBoundsException e) {
}
}
- 删除指定索引处的元素
/**
*
* @param index
*/
public boolean deleteElementByIndex(int index){
//索引合法性校验
checkIndex(index);
//删除指定索引的元素时,要将后面的元素向前移动一位
System.arraycopy(arr, index+1, arr, index, size-index-1);
//将size-1
size--;
return true;
}
- 删除指定元素 deleteElementByElement(Object obj)
/**
*
* 如果成功,返回true
* @param obj
* @return
*/
public boolean deleteElementByElement(Object obj){
//1.遍历数组,查看obj是否在数组中存在,如果有则返回第一次出现的索引。直接调用方法 searchIndexByElement(Object obj)
int index = searchIndexByElement(obj);
//2.按照索引删除指定元素,直接调用方法
if(index>=0){
deleteElementByIndex(index);
return true;
}else{
return false;
}
}
- 将指定索引处的元素修改为指定元素
/**
*
* @param index
* @param obj
* @return
*/
public boolean updateElementByIndex(int index,Object obj){
//索引合法性校验
checkIndex(index);
//根据下标将指定位置元素替换
arr[index] = obj;
return true;
}
- 在指定索引插入指定元素 insertElementByIndex(int index,Object obj)
/**
*
*/
public boolean insertElementByIndex(int index,Object obj){
//索引校验
checkIndex(index);
//增加长度
arr = Arrays.copyOf(arr, ++size);
//插入指定元素,要将后面的元素向后挪动一位
System.arraycopy(arr, index, arr, index+1, size-index-1);
arr[index] = obj;
return true;
}
- 创建指定长度的数组集合
/**
* 11.创建一个指定长度的_01ArrayList对象 *
*/
public _01ArrayList(int length) {
//校验length合法性
if(length<=0){
throw new IllegalArgumentException("数组长度不能为小于等于0,length:"+length);
}
arr = new Object[length];
}
/**
* 12.如果默认无参构造创建,则创建默认长度是10的容器
*/
public _01ArrayList() {
this(10);
}
/**
*13.将数组中所有元素清空 clear();
*/
public void clear(){
//将数组重新创建一个空数组
arr = new Object[10];
//将数组的元素个数清0
this.size = 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/75271.html