泛型如何使用以及作用

泛型的引入

在之前的堆栈中,我们只能存储int数据,如果需要存储float数据,就必须再定义一个堆栈。我们发现代码基本上是一样的,只是将其中的部分int改成了float,但是我们不得不重新写一遍。

如果以后还要存储double、String……等类型数据怎么办?有没有一劳永逸的办法只写一遍呢?——泛型。

public class FloatStack {
   private float []data;//数据存储区
   private int capacity;//堆栈容量
   private int size;//堆栈当前实际大小
   private int top;//栈顶位置

   public FloatStack(int capacity){
      this.capacity = capacity;
      data = new float[capacity];
      size = 0;
      top = -1;
   }

   public boolean isFull(){
      return size == capacity;
   }
   
   public boolean isEmpty(){
      return size == 0;
   }
   
   public boolean push(float d){
      if(isFull()){
         return false;
      }
      
      top++;
      size++;
      data[top] = d;
      
      return true;
   }
   
   public Float pop(){
      if(isEmpty()){
         return null;
      }
      float d = data[top];
      top--;
      size--;
      
      return d;
   }
}

泛型的定义和使用

使用泛型定义一个通用性堆栈。也就是把刚才的特定类型改为“某种”类型,即泛指某种类型(这就是泛型的由来)。就这么一点小小的改动带来的确实本质性的变化——一劳永逸,体现了通用。

public class CommonStack<T> {
   private T []data;//数据存储区
   private int capacity;//堆栈容量
   private int size;//堆栈当前实际大小
   private int top;//栈顶位置

   public CommonStack(int capacity){
      this.capacity = capacity;
      data = (T[]) new Object[capacity];
      size = 0;
      top = -1;
   }

   public boolean isFull(){
      return size == capacity;
   }
   
 public boolean isEmpty(){
      return size == 0;
   }
   
   public boolean push(T d){
      if(isFull()){
         return false;
      }
      
      top++;
      size++;
      data[top] = d;
      
      return true;
   }
   
   public T pop(){
      if(isEmpty()){
         return null;
      }
      T d = data[top];
      top--;
      size--;
      
      return d;
   }
}

使用泛型的时候需要指定具体类型

CommonStack<Float>  s2 = new CommonStack<Float> (5);

这个叫类型参数化也就是将类型作为参数在此之前我们说的参数都是数据只不过数据是有类型的普通参数用“()”,类型参数用“<>”。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值