首先明确我们的数组都有什么功能
我们的数组不仅是能存放int类型,当传参传入什么类型时,就应该保存什么类型,所以我们需要用到泛型
public class MyArrary<T> {
private T[] value; //保存数据
int size; //实际存放个数
int capacity; //容积
// 构造方法
public MyArrary(int capacity){
if(capacity<=0){
this.capacity=10;
}else {
this.capacity=capacity;
}
this.size=0;
this.value=(T[])(new Object[this.capacity]);
//不可以直接new一个T[]类型,所以需要先new一个Object[]类型然后转为T[]
}
//获取实际长度
public int getSize() {
return this.size;
}
//获取数组的容积
public int getCapacity() {
return this.capacity;
}
//判断数组是否为空
public boolean ifnull(){
return this.size==0;
}
//向数组中添加元素
//this.size是指向待插入元素的索引
public void adddata(T data){
insert(this.size,data);
}
//修改指定位置的值
public void modify(int index,T data){
if(index<0||index>capacity){
throw new IllegalArgumentException("index is invalid.");
}
this.value[index]=data;
}
//插入元素
public void insert(int index,T data){
if(index<0||index>this.capacity){
throw new IllegalArgumentException("index is invalid.");
}
if(this.size==this.capacity){ //如果数组满了就重新设置容积
resize(2*this.capacity);
}
for(int i=this.size;i>index;i--){ //从末尾size开始往回遍历,第i个等于i-1个
this.value[i]=this.value[i-1];
}
this.size++;
this.value[index]=data;
}
//删除索引位置元素
public void delete(int index){
if(index<0||index>this.capacity){
throw new IllegalArgumentException("index is invalid.");
}
if(this.size<=this.capacity/4){ //如果数组的实际长度比容积的1/4还小说明浪费了太多空间需要重新设置容积
resize(this.capacity/2);
}
for(int i=index;i<this.size-1;i++){ //从索引开始第i个等于i+1个
this.value[i]=this.value[i+1];
}
this.size--;
}
//获取索引位置的值
public T getindexdata(int index){
if(index<0||index>this.capacity){
throw new IllegalArgumentException("index is invalid.");
}
return this.value[index];
}
//根据值获取索引
public int getindex(T data){
for (int i = 0; i < this.size; i++) {
if(data==this.value[i]){
return i;
}
}
return -1;
}
//向头部添加元素
public void inserttop(T data){
insert(0,data);
}
@Override
public String toString() {
StringBuilder s=new StringBuilder(); //需要用到StringBuilder的append来添加'[',']',','
s.append("[");
for (int i = 0; i < this.size; i++) {
s.append(this.value[i]);
if(i!=this.size-1) {
s.append(",");
}
}
s.append("]");
String string=s.toString(); //把StringBuilder转换成String
return string;
}
//是否包含某元素
public boolean contain(T data){
for (int i = 0; i < this.size; i++) {
if(data==this.value[i]){
return true;
}
}
return false;
}
//重新给容积
private void resize(int newcapacity){
//由于数组的容积都是不变的所以需要新建一个数组
T [] newvalue=(T[])(new Object[newcapacity]);
//转移数组
for (int i = 0; i < this.size; i++) {
newvalue[i]=this.value[i];
}
//改变容器,数组
this.value=newvalue;
this.capacity=newcapacity;
}
}