public class MyArrayList {
private static final int DEFAULT_CAPACITY = 10;
//存放元素的数组
private Object [] value;
private static final Object[] EMPTY_ELEMENTDATA = {};
//数组中元素的个数
private int size;
//初始化创建大小为10的数组
public MyArrayList() {
this(DEFAULT_CAPACITY);
}
public MyArrayList(int capacity) {
if(capacity > 0){
this.value = new Object[capacity];
}else if(capacity == 0){
this.value = EMPTY_ELEMENTDATA;
}else{
throw new IndexOutOfBoundsMyException("Illegal Capacity:"+ capacity);
}
}
public int size(){
return size;
}
public boolean isEmpty(){
return size ==0;
}
public boolean contains(Object obj){
return indexOf(obj) >=0;
}
public int indexOf(Object obj){
if(obj == null){
for (int i = 0; i < size; i++){
if(value[i] == null){
return i;
}
}
}else{
for (int i = 0; i < size; i++) {
if(value[i] == obj){
return i;
}
}
}
return -1;
}
public int lastIndexOf(Object obj) {
if (obj == null) {
for (int i = size-1; i >= 0; i--)
if (value[i] == null)
return i;
} else {
for (int i = size-1; i >= 0; i--)
if (value[i] == obj)
return i;
}
return -1;
}
public void add(Object obj){
value[size] = obj;
size++;
int oldCapacity = value.length;
//1.插入数据时,判断空间是否够
if(size >= oldCapacity){
//2.不够的话,扩容之前1.5倍
int newCapacity = oldCapacity +oldCapacity >> 1;
Object [] newList = new Object[newCapacity];
//3.把数据copy到新的数组中
for (int i = 0; i < value.length; i++) {
newList[i] = value[i];
}
value = newList;
}
}
public Object get(int index){
rangeCheck(index);
return value[index];
}
public Object set(int index,Object obj){
rangeCheck(index);
Object oldValue = value[index];
value[index] = obj;
return oldValue;
}
public void clear(){
for (int i = 0; i < value.length; i++) {
value[i] = null;
}
size = 0;
}
private void rangeCheck(int index) {
if(index <0 || index >= size){
throw new IndexOutOfBoundsMyException("MyArrayList 数组索引越界");
}
}
}
08-10
1131
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
04-05
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交