数组一般用来存储多个相同类型数据的数据结构,如果存储的数据类型不同,在一些应用场景下可能会出现问题,此时就可以利用泛型来解决
泛型,即“参数化类型”,要求存放的类型不能是基本数据类型,只能是引用类型,如果是基本数据类型,那么就用它的封装类
泛型的表示方法:< E > 还有T、K、V均可以使用,除此之外其他字母可以用但没有可读性
代码实现:
public class ArrayList<E> {
//初始数组
private Object[] arr;
private int size = 0;
private static int len = 10;
//构造方法初始化初始数组长度
public ArrayList(int len){
arr = new Object[len];
}
public ArrayList(){
this(len);
}
//添加
public void add(E e){
dilatation();
//保存数据
arr[size] = e;
size++;
}
//扩容数组
private void dilatation(){
if(size == arr.length){
Object[] nArr = new Object[arr.length*2];
for(int i=0;i<arr.length;i++){
nArr[i] = arr[i];
}
arr = nArr;
}
}
//插入
public void add(int index,E e){
dilatation();
if(index<0||index>size){
System.out.println("位置不合法!");
}else{
for(int i=size-1;i>=index;i--){
arr[i+1] = arr[i];
}
arr[index] = e;
size++;
}
}
//移除
public Object remove(int index){
if(index<0||index>size){
System.out.println("位置不合法!");
}else{
for(int i=index;i<=size-1;i++){
arr[i] = arr[i+1];
}
}
size--;
return null;
}
//移除指定数据
public boolean removes(E e){
int index = -1;
for(int i=0;i<size;i++){
if(arr[i] == e){
index = i;
break;
}
}
if(index == -1) return false;
for(int i=index;i<size-1;i++){
arr[i] = arr[i+1];
}
size--;
return true;
}
//获取
public Object get(int index){
if(index < 0 || index >= size){
System.out.println("下标越界!!!");
return null;
}
return arr[index];
}
//长度
public int size(){
return size;
}
//主函数 以Integer为例
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList();
list.add(9);
list.add(8);
list.add(7);
// list.add(2,"d");
// list.remove(2);
list.removes(8);
list.add(10);
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
}
}
测试结果: