数据结构泛型

1.定义

先让我们看看官方是如何定义泛型的

是不是看起来不太容易,解释一下:

就是我们想有一种数据类型,它可以适用各种数据类型。从代码上讲就是对类型实现参数化。

2.引例

例:实现一个类,类中包含一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值。

思路

我们见过整形数组:int[ ] arr1 = {1,2,3}; 字符型数组String[ ] arr2 = {a,b,c}

现在我们想有一个这样的数组{1 , 2 , a , b , 3.432} 整型、字符型、浮点型等等都有

我们知道 Object 是任何类的父类

所以我们这样写:

 public Object[] array = new Object[10];

那么我们就可以对这个数组进行如下操作

class MyArray{
    public Object[] array = new Object[10];
    public Object getPos(int pos){ //获取pos下标的值
        return array[pos];
    }
    public void setPos(int pos,Object val){ //给pos下标放一个元素
        array[pos] = val;
    }
}

于是我们调用这两个方法

但是我们并不能获取下标为1的元素,因为Array里面的数据类型是Object,而ret是字符串。

Object是String的父类,这是向下转型,所以会报错。

我们要强制类型转换才不会报错

String ret = (String) myArray.getPos(1);

 但是我们希望:

1.我们能不能自己指定类型

2.我们能不能不再进行强制类型转换

于是出现了泛型可以满足我们的要求。

3.语法

<T>:占位符—>代表当前类是一个泛型类

1.<Integer>指定当前类中,使用的类型是Integer类型,即指定这个数组是Integer类型的
2.泛型在编译期间做了两件事:
      2.1 存放元素的时候,进行了类型的检查
      2.2 取元素的时候,进行了类

3.<>里面是引用类型

class MyArray<T>{ //定义一个泛型类
    //public Object array[] = new Object[10];
    //public T[] array = new Object[10]; 报错
    public T[] array = (T[]) new Object[10];
    public T getPos(int pos){ //获取pos下标的值
        return array[pos];
    }
    public void setPos(int pos,T val){ //给pos下标放一个元素
        array[pos] = val;
    }
}
public class TestDemo {
    public static void main(String[] args) {
       
        MyArray<Integer> myArray = new MyArray<Integer>();//也可以写成new MyArray<>()
        myArray.setPos(0,1);
        Integer ret = myArray.getPos(0);
        System.out.println(ret);

        MyArray<String> myArray1 = new MyArray<String>();
        myArray1.setPos(0,"abc");
        String ret1 = myArray1.getPos(0);
        System.out.println(ret1);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值