关于arraylist源码实现问题
package com.day01;
import java.util.Arrays;
/**
*
* @author Administrator ArrayList集合
* @param <E>
*/
public class ArrayList<E> {
private int head = 0;// 头指针
private static final int ARRAY_SIZE = 1;// 集合默认长度为0(1)
private E[] list;
private int size = 0;
public ArrayList() {
list = (E[]) new Object[ARRAY_SIZE];
}
/**
* 带参构造 指定大小
*
* @param size
*/
public ArrayList(int size) {
list = (E[]) new Object[size];
}
/**
* 元素数量
*
* @return
*/
public int size() {
return this.size;
}
/**
* 判断元素是否满
*
* @return
*/
private boolean isFull() {
return size == list.length;
}
/**
* 添加元素
*
* @param element
*/
public void add(E element) {
ensureCapacity();
list[head] = element;
head++;
size++;
}
/**
* 删除元素
*/
public void remove(E element) {
boolean flag = contains(element);// 先查找是否有该元素
E[] elements = (E[]) new Object[size];
if (flag) {
// 当值为真时
for (int i = 0; i < size; i++) {
if (list[i].equals(element) ) {
list[i] = null;
break;
}
}
size--;
} else {
System.out.println("没有找到有该元素");
}
}
/**
* 查询是否有元素
*
* @param element
* @return
*/
public boolean contains(E element) {
boolean flag = false;
for (E e : list) {
if (e.equals(element)) {
flag = true;
}
}
return flag;
}
/**
* 数组扩容
*/
public void ensureCapacity() {
if (isFull()) {
E[] e = (E[]) new Object[size + 1];
for (int i = 0; i < size; i++) {
e[i] = list[i];
}
list = e;
}
}
/**
* 返回元素内容
*/
public String toString() {
StringBuilder sb = new StringBuilder();
if (size == 0) {
sb.append("[]");
} else {
for(E e : list) {
if(e == null) {
continue;
}else {
sb.append(e+" ");
}
}
}
return sb.toString();
}
}
以上是我编写的代码,其中关于remove方法当中,为什么第一次删除没事,第二次删除则报空指针异常。 老师只需要操作add方法和remove方法即可,其他的我还没写好。只是不明白为啥remove方法会报这个错误
正在回答 回答被采纳积分+1
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星