泛型的使用

在类名的后面加上一个< >,符替代参数类 返回值类型 或者局部对象的类型,通配符指定成一个具体的类型

public class MyArray<E> {

Object [] values ;//object所有数据类型
int size ; // 作为元素个数 / 作为下次存储元素的下标
int length ;
static final int initCap = 10 ;//final定义常量
// 构造方法:
public MyArray (){//public针对全局
length = initCap ;
values = new Object [ length ];
size = 0 ;
}
public MyArray ( int initLength ){
if ( initLength < 2 ){
System . out . println ( " 输入的初始长度不能小于 2, 数组会使用默认的初始数据进行初始
化 " );
length = initCap ;
values = new Object [ length ];
size = 0 ;
} else {
length = initLength ; // 使用传入的参数进行初始化
values = new Object [ length ];
size = 0 ;
}
}

public int size(){

return size;}

public boolean isEmpty(){
return size == 0;
}
public void grow(int minLength){
int oldLength = length;
int newLength = minLength;// 1.5倍
// 使用新的长度创建一个新的 容量更大的数组
Object[] newValues = new Object[newLength];
// 将原数组中的元素i移动到新数组中
for(int i = 0; i < oldLength; i++){
newValues[i] = values[i];
}// 将新数组地址赋值给旧数组名
// 替换引用 因为这个类中所有的方法都是使用 values这个变量名
values = newValues;
// 更新最新的数组长度
length = newLength;
System.out.println ("数组扩容完成,长度是:" + length);
}
public void add(E e){
// 扩容
if(size == length){// 数组已经存满了 需要扩容的
int newLength = length + (length >> 1);
grow (newLength);
}
values[size] = e;
size++;
}
// 将一个数组存入动态数组中 重点考虑扩容
// eArr的长度 远大于 values的长度
public void addAll(E[] eArr){
// 需要添加的数组的长度
int eArrLength = eArr.length;
// 目前数组的长度
int valuesLength = values.length;
// 如果剩余的空间小于需要添加的数组的长度 需要扩容
if(valuesLength - size < eArrLength){
// 一步扩容到位
int minSize = eArrLength + size;// 最少需要的空间
int minLength = valuesLength + (valuesLength >> 1);// 1.5倍扩容
if(minSize < minLength){
// 1.5倍扩容
grow (minLength);
} else{
grow (minSize);
}
}
for(int i = 0; i < eArrLength; i++){
values[size++] = eArr[i];
}
}
// 根据传入的下标获取数组元素
public E get(int index){
// 检查传入的下标是否在合法的区间内 (0~size-1)
if(index >= 0 && index < size){E e = (E) values[index];
return e;
}
System.out.println ("传入的下标不在数组的范围内~");
return null;
}
// 替换传入下标位置的元素
public void set(int index, E e){
// 检查传入的下标是否在合法的区间内 (0~size-1)
if(index >= 0 && index < size){
values[index] = e;
} else{
System.out.println ("传入的下标不在数组的范围内~");
}
}
// 根据下标移除元素 并且返回被移除的元素
// 被移除的元素所在的位置,需要后置数据前移填充
public E remove(int index){
if(index >= 0 && index < size){
E oldE = (E) values[index];
for(int i = index; i < size - 1; i++){
values[i] = values[i + 1];
}
size--;
return oldE;
}
System.out.println ("传入的下标不在数组的范围内~");
return null;
}
public String toString(){
String str = "{";
for(int i = 0; i < size; i++){
str += values[i] + ",";
}
str += "}";
return str;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值