普通数组的实现
程序员文章站
2022-09-20 12:14:38
普通数组的实现package ArrayStack;public class MyArray { private E []data; //1新键一个数组 private int size; //2 新键计数数组个数public MyArray(int size) {data=(E[])new Object[size];size=0;}public MyArray() { //3 初始化完成 this(10);}//...
普通数组的实现
package ArrayStack;
public class MyArray <E>{
private E []data; //1新键一个数组
private int size; //2 新键计数数组个数
public MyArray(int size) {
data=(E[])new Object[size];
size=0;
}
public MyArray() { //3 初始化完成
this(10);
}
// 4添加方法>任意位置
public void add(int index,E e) {
//判断index 是否越界
if(index>size||index<0) {
throw new IllegalArgumentException("下标越界");
}
//判断是否需要阔容 >>等于最后一个元素
if(size==data.length) {
resize(data.length*2);
}
//腾出位置>>>size是先行指针,要退回一格
for(int i=size-1;i>=index;i--) { // -1 i>=0 i--
data[i+1]=data[i];
}
//在index的位置添加e,并维护size;
data[index]=e;
size++; //size是先行的
}
// 5增加方法>尾部添加
public void addLast(E e) {
//如果数组存放满了,无法继续添加
add(size,e);
}
//6 增加方法>在头部添加
public void addFirst(E e) {
add(0,e);
}
//6 删除方法 > 删除指定元素
//7 删除 >>指定索引值
public E removeIndex(int index) {
// TODO Auto-generated method stub
if(index>=size||index<0) {
throw new IllegalArgumentException("remove faile,index is illegal");
}
//找出待删除元素并存储起来
E res =data[index];
for(int i=index;i<size;i++) {
data[i]=data[i+1]; //往前挪一位进行 覆盖
}
//维护size ,因为元素数目减少一位
size--;
//懒得算法 缩容>>具有一定弹跳性
if(size==data.length/4&&data.length!=1) {
resize(data.length/2);
}
return res;
}
//8删> 尾部
public E removeLast() {
return removeIndex(size-1);
}
//9 删 >头部
public E removFirst() {
return removeIndex(0);
}
//10查> 指定索引
public int findIndex(int e) {
// TODO Auto-generated method stub
for(int i=0;i<size;i++) {
if(data[i].equals(e)) {
return i;
}
}
return -1;
}
//11改>
public void set(int index ,E e) {
//改元素之前先判断
if(index>size||index<0) {
throw new IllegalArgumentException("set fail,index is Illgal");
}
data[index]=e;
}
//12 查> 是否含有该元素
public boolean contain(E e) {
for(int i=0;i<size;i++) {
//值的比较
if(data[i].equals(e)) {
return true;
}
}
return false;
}
//12 查 > 索引查元素
public E getElement(int index) {
//判断索引是否越界
if(index>=size||index<0) {
throw new IllegalArgumentException("get index fail,index is illegal");
}
return data[index];
}
//13 查 >元素查索引
public int getIndex(int i) {
return findIndex(i);
}
//20 阔容 > 新键一个原先大小两倍数组空间,将原先数组元素一存放到新的数组里面取
public void resize(int newcapacity) {
// TODO Auto-generated method stub
E []newdata=(E[])new Object[newcapacity];
for(int i=0;i<size;i++) {
newdata[i]=data[i];
}
data=newdata;
}
//21 实现栈 新增加的方法
public E getLast() { //拿到最后一个元素
return getElement(size-1);
}
//22 拿到元素的个数
public int getSize() {
return size;
}
//23 判断队列是否为空
public boolean isEmpty() {
return size==0;
}
//重写toStriing
@Override
public String toString() {
// TODO Auto-generated method stub
StringBuffer res=new StringBuffer();
res.append(String.format("Array:size=%d,capacity=%d\n", size,data.length));
res.append("[");
//遍历数组
for(int i=0;i<size;i++) {
if(i==size-1) {
res.append(data[i]);
}else {
res.append(data[i]+",");
}
}
res.append("]");
return res.toString();
}
}
本文地址:https://blog.csdn.net/weixin_45952706/article/details/110221244