本文是《玩转数据结构》课程中对数组的复习。
数组类:
/*
动态泛型数组 支持所有类元素的存储
*/
public class MyArray<E> {//*数组中使用泛型,E表示任意类型
private int size;
private E[] datas;
//构造函数,capacity初始容量,默认为2
public MyArray(int capacity){
//datas=new E[capacity];//E类型不能直接new
datas=(E[])new Object[capacity];
//*java中E不能直接new,由Object转化转化为E[]子类
}
public MyArray(){
datas=(E[])new Object[2];
}
//查看数据数量
public int getSize(){
return size;
}
//查看是否为空
public boolean isEmpty(){
return (size==0);
}
//查看数组内容
@Override//表示覆盖父类函数
public String toString(){
StringBuilder str=new StringBuilder();//StringBuilder的使用
str.append("capacity:"+datas.length+"\nsize:"+size+"\ndatas:");
for(int i=0;i<size;i++)
str.append(datas[i]+"\t");
return str.toString();
}
//根据下标查看数据
public E get(int index){
if(index<0||index>=size){
throw new IllegalArgumentException("Get Failed.Index is illegal");
}
return datas[index];
}
//根据下标修改元素
public boolean set(int index,E data){
if(index<0||index>=size)
return false;
else{
datas[index]=data;
return true;
}
}
//删除指定位置数据
public boolean remove(int index){
if(index<0||index>=size)
return false;
for(int i=index;i<size-1;i++){
datas[i]=datas[i+1];
}
size--;
datas[size]=null;
//*置为空才能进行垃圾回收 lolitering objects闲逛元素
return true;
}
//根据数值获得索引
public int find(E data){
for(int i=0;i<size;i++){
if(datas[i].equals(data))
//*类元素相等用equals表示值相等,==表示指向相同
return i;
}
return -1;//-1下标无效
}
//增加元素
public void add(E data){
if(size==datas.length){//此元素将放入size处
E[] newDatas=(E[])new Object[datas.length*2];
System.arraycopy(datas,0,newDatas,0,datas.length);
newDatas[size++]=data;
datas=newDatas;
}
else {
datas[size++] = data;
}
}
}
测试类
public class Main {
public static void main(String[] args) {
MyArray<Integer> ma = new MyArray<>();
//*泛型类创建实例
//*泛型中不能为基本数据类型,只能为类。基本数据类型与相应包装类可以自动转换
ma.add(6);
ma.add(5);
ma.add(4);
ma.add(3);
ma.add(1);
System.out.println(ma.toString());
System.out.println(ma.find(1));
}
}