java中ArrayList的实现模拟
程序员文章站
2022-04-18 18:35:57
...
1.ArrayList集合的特点
1.查询,更改较快,新增和删除较慢。
2.面试问得较多,一般要求模拟实现。
2.代码
Import java.util.Arrays;
public class MyArrayList {
// 将字段私有化,防止对象直接访问,只能通过公共方法在本类中访问
private Object[] elements = null;
private static int DEFAULT_INIT_CAPACITY = 5;
private int size;
//无参构造方法,初始化Object数组的大小为默认大小,Object数组可以储存一切对象
public MyArrayList() {
this(DEFAULT_INIT_CAPACITY);
}
// 带参的构造方法,初始化数组长度
public MyArrayList(int initCapacity) {
if (initCapacity < 0) {
throw new IllegalArgumentException("容量不能为负数");
}
elements = new Object[initCapacity];
}
// 往数组中添加元素
public void add(Object ele) {
// 自动扩容机制
if (size == elements.length) {
Object[] temp = Arrays.copyOf(elements, elements.length * 2);
elements = temp;
}
elements[size] = ele;
size++;
}
// 根据索引查对象的元素
public Object get(int index) {
if (index < 0 || index >= size) {
throw new IllegalArgumentException("索引越界,或者索引不存在");
}
return elements[index];
}
// 根据对象的元素获取得索引
public int getIndexByele(Object ele) {
for (int index = 0; index < size; index++) {
if (elements[index] == ele) {
return index;
}
}
return -1;
}
// 根据索引更改对象的元素
public void set(int index, Object ele) {
if (index < 0 || index >= size) {
throw new IllegalArgumentException("索引越界,或者索引不存在");
}
elements[index] = ele;
}
// 用新元素替换旧元素
public void update(Object oldele, Object newele) {
int index = getIndexByele(oldele);
if (index < 0 || index >= size) {
throw new IllegalArgumentException("你要更改的对象不存在");
}
set(index, newele);
}
// 删除指定索引位置的元素
public void delete(int deleteIndex) {
if (deleteIndex < 0 || deleteIndex >= size) {
throw new IllegalArgumentException("索引越界,或者索引不存在");
}
for (int index = deleteIndex; index < size - 1; index++) {
elements[index] = elements[index + 1];
}
elements[size - 1] = null;
size--;
}
// 获取元素的个数
public int size() {
return size;
}
// 查看元素个数是否为0
public boolean isEmpty() {
return size == 0;
}
// 清空所有元素
public void clear() {
elements = new Object[DEFAULT_INIT_CAPACITY];
size = 0;
}
// 覆写toString方法,打印对象
public String toString() {
if (elements == null) {
return null;
}
if (size == 0) {
return "[]";
}
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int index = 0; index < size; index++) {
sb.append(elements[index]);
if (index != size - 1) {
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
}
上一篇: 底层ArrayList的简单模拟实现
下一篇: 医美行业面临洗牌!百度不再收录