关于ArraLIst<E>的方法(自己定义的)
- add(E e);
- add(int index,E e);
- remove(Object o);
- remove(int index);
- set(int index, E e);
- int size();
- boolean isEmpty();
- int indexOf(Object o);
- Object[] toArray();
遇到难题就是:
- 当添加时集合中容量不够时,如何进行自动扩容
- 当泛型数据类型为Integer时,进行remove(Object o)方式时,如果填入数字系统会默认为int,需要创建Integer对象,不然调用的是remove(int index);
代码如下:
创建集合接口MyList<E>
package com.hare.myarrrylist;
public interface MyList<E> {
//普通添加
boolean add(E e);
//插入添加
boolean add(int index,E e);
//指定删除
boolean remove(Object o);
//指定下标删除
E remove(int index);
//替换
E set(int index,E e);
//大小
int size();
//是否为空
boolean isEmpty();
//获取指定下标
int indexOf(Object o);
//转为数组
Object[] toArray();
}
创建实现接口类MyArrayList<E>
package com.hare.myarrrylist;
import java.util.Arrays;
public class MyArrayList<E> implements MyList<E> {
private Object[] elementData = null;//空数组
private static final int DEFAULT_NUM=10;//默认值10
private int size = 0;//计数器
//默认初始容量10
public MyArrayList() {
this.elementData = new Object[DEFAULT_NUM];
}
public Object[] getElementData() {
return elementData;
}
public void setElementData(Object[] elementData) {
this.elementData = elementData;
}
public static int getDefaultNum() {
return DEFAULT_NUM;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
//自动后面追加添加数据
@Override
public boolean add(E e) {
grow();
elementData[size] = e;
getSize();
return true;
}
//指定插入数据
@Override
public boolean add(int index, E e) {
if(index < 0 || index > elementData.length){
throw new ArrayIndexOutOfBoundsException(index);
}
size++;
grow();
for (int i = size -1; i >index; i--) {
elementData[i] = elementData[i-1];
}
elementData[index] = e;
return true;
}
//删除参数对象的值
@Override
public boolean remove(Object o) {
for (int i = 0; i <= size; i++) {
if(elementData[i].equals(o)){
for (int j = i; j <= size; j++) {
elementData[j] = elementData[j+1];
}
size--;
return true;
}
}
return false;
}
//删除指定下标的值
@Override
public E remove(int index) {
E e = (E) elementData[index];
if(index>0||index>elementData.length){
for (int i = index; i <= size; i++) {
elementData[i]=elementData[i+1];
}
size--;
return e;
}else{
throw new ArrayIndexOutOfBoundsException(index);
}
}
//替换指定下标中的值
@Override
public E set(int index, E e) {
E e1 = (E) elementData[index];
if(index>0 || index<elementData.length){
elementData[index] = null;
elementData[index] = e;
}
return e1;
}
//获取集合长度
@Override
public int size() {
return this.size;
}
//判断是否集合为空
@Override
public boolean isEmpty() {
return size == 0?true:false;
}
//根据参数返回对应下标
@Override
public int indexOf(Object o) {
int index;
for (int i = 0; i < elementData.length; i++) {
if(elementData[i].equals(o)){
index=i;
return index;
}
}
return 0;
}
//转换成数组
@Override
public Object[] toArray() {
return Arrays.copyOf(elementData,size);
}
//扩容
public void grow(){
//当集合长度与自增累加相同时,开始扩容,一次1.5倍
if(elementData.length == size){
int old = elementData.length;
int newlength = old+(old/2);
elementData=Arrays.copyOf(elementData,newlength);
}
}
}
创建测试类Test
package com.hare.myarrrylist;
import java.util.ArrayList;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
MyArrayList<Integer> list = new MyArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
list.add(7);
list.add(8);
list.add(9);
list.add(10);
list.add(11);
Object[] obj = list.toArray();
System.out.println("添加后的集合为:"+Arrays.toString(obj));
//添加后的集合为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
//插入添加
list.add(1,12);
obj = list.toArray();
System.out.println("插入后的新集合为:"+Arrays.toString(obj));
//插入后的新集合为:[1, 12, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
//普通删除
list.remove(new Integer(1));
obj = list.toArray();
System.out.println("删除后的集合为:"+Arrays.toString(obj));
//删除后的集合为:[12, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
//下标删除
list.remove(1);
obj = list.toArray();
System.out.println("指定删除后的集合为:"+Arrays.toString(obj));
//指定删除后的集合为:[12, 3, 4, 5, 6, 7, 8, 9, 10, 11]
//替换
list.set(1,13);
obj = list.toArray();
System.out.println("替换后的集合为:"+Arrays.toString(obj));
//替换后的集合为:[12, 13, 4, 5, 6, 7, 8, 9, 10, 11]
//判断是否为空
boolean b= list.isEmpty();
System.out.println("集合是否为空:"+b);
//集合是否为空:false
//获取指定下标
int i= list.indexOf(new Integer(13));
System.out.println("指定下标为:"+i);
//指定下标为:1
}
}