模拟ArrayLIst的底层实现
package com.tedu.api04.list;
import java.util.Objects;
/**
* @author LIGENSEN
* Date: 2023/7/20 11:35
*/
public class ArrayListDemo {
public static void main(String[] args) {
ArrList list=new ArrList(1);
list.add("a");
list.add("b");
list.add("c");
list.add("f");
list.add("c");
// list.add(0,"d");
// list.clear();
// list.add(4,"e");
// list.add(2,"f");
// list.add(4,"e");
System.out.println(list.indexOf("d"));
System.out.println(list.contains("c"));
System.out.println(list.get(2));
System.out.println(list.isEmpty());
System.out.println(list.lastIndexOf("c"));
list.remove(3);
list.remove("a");
list.set(1,"cc");
System.out.println(list.subList(0, 1));
list.toArray();
System.out.println(list);
}
}
/**
* 用数组来实现 ArrList
* 集合里面可以用 Object[] 存任意的数据
*
* @param
*/
//模拟:用数组来实现ArrayList
class ArrList{
//数组
private Object[] arr;
//数组元素个数
private int size;
//初始容量
private int initialCapacity;
public ArrList(){
arr=new Object[10];
}
//指定容量
public ArrList(int initialCapacity){
// 初始容量必须 > 0
if(initialCapacity size)
throw new IndexOutOfBoundsException("Index:" + index +",Size" + size);
//判断是否需要扩容
if(size == arr.length) grow();
//移动元素
/*for (int i = size-1; i >= index ; i--) {
arr[i+1]=arr[i];
}*/
System.arraycopy(arr,index,arr,index+1,size-index);
arr[index]=e;
size++;
}
//清空集合
public void clear(){
//清空每一个元素对应的引用
for (int i = 0; i = 0;
}
//判断越界
private void outBounds(int index){
if(index = size)
throw new IndexOutOfBoundsException("Index:"+index+",Size"+size);
}
//获取指定位置上的元素
public E get(int index){
//判断越界
outBounds(index);
//获取指定的元素
return (E)arr[index];
}
//判断集合是否为空
public boolean isEmpty(){
return size= 0 ; i--) {
if (Objects.equals(arr[i],e))return i;
}
return -1;
}
//删除指定下标上的元素
public void remove(int index){
//判断越界
outBounds(index);
//后边的元素覆盖前面的元素
/*for (int i = index+1; i = 0)remove(index);
}
//替换指定位置上的元素
public void set(int index,E e){
//越界
outBounds(index);
//替换
arr[index]=e;
}
//获取元素个数
public int size(){
return size;
}
//截取子列表
public ArrList subList(int fromIndex,int toIndex){
//判断下标范围
if(fromIndex size || fromIndex > toIndex)
throw new IllegalArgumentException();
//截取字列表
ArrList sub=new ArrList();
for (int i = fromIndex; i > 1);
//构建新的数组
Object[] arr=new Object[capacity];
//将原来数组中的元素赋值到新的数组中
System.arraycopy(this.arr,0,arr,0,size);
this.arr=arr;
}
//转为字符传
@Override
public String toString() {
//判断集合是否为空
if(size
运行结果如下:
服务器租用托管,机房租用托管,主机租用托管,https://www.e1idc.com