java-----泛型

1.泛型前言

泛型的本质是参数化类型,
参数化类型:所操作的数据类型被指定为一个参数,将类型由原来的具体的类型参数化

//泛型中:T\E\K\V
import java.util.Arrays;
//可存在多个泛型类型<T,E,..>
public class MyArrayList<T> {
    private T[] element;
    private int size;
    public MyArrayList(){
        this(10);//this();  只能在构造函数之间调用 (位于当前有效代码第一行)
    }
    public MyArrayList(int num){
        element = (T[])new Object[num];
    }

    /*
    行为
     */
    public void addTail(T value){
        if(size == element.length){
            element = Arrays.copyOf(element,element.length*2);
        }
        element[size++] = value;
    }
    public void show(){
        for (int i = 0; i < size; i++) {
            System.out.print(element[i]);
        }
    }
}

public class TestDemo {
    public static void main(String[] args) {
        MyArrayList<String> myString = new MyArrayList<>();
        myString.addTail("String");

        MyArrayList<Integer> my = new MyArrayList<>();
        my.addTail(10);
        my.addTail(20);//1.任何引用类型都可以操作MyArrayList 2.通过泛型参数保证了所操作的数据类型相同
        //MyArrayList my = new MyArrayList();
        //MyArrayList<Object> my = new MyArrayList<>();
    }
}

1、泛型类: class 类名<泛型参数>{ }
2、泛型参数只作用于编译期间,运行->类型擦除(T变成Object)

  • 类型安全检测
  • 类型推导
    3、泛型注意点:
  • 泛型参数只能是引用数据类型,不能是基本数据类型
  • 不能直接new泛型数组
  • 不能直接new泛型对象 new T()
  • 对类型进行自动检查
  • 自动对类型类型推导

2.泛型接口

使用:
在这里插入图片描述

3.泛型方法

返回值前面加上泛型参数
例:swap()
在这里插入图片描述
针对任何数据类型都可以交换
在这里插入图片描述
冒泡排序泛型实现:
在这里插入图片描述
冒泡放在ArrayList中(类型擦除Object

import java.util.Arrays;
//可存在多个泛型类型<T,E,..>
public class MyArrayList<T extends Comparable<T>> {
    private T[] element;
    private int size;
    public MyArrayList(){
        this(10);//this();  只能在构造函数之间调用 (位于当前有效代码第一行)
    }
    public MyArrayList(int num){
        element = (T[])new Comparable[num];
    }

    /*
    行为
     */
    public void addTail(T value){
        if(size == element.length){
            element = Arrays.copyOf(element,element.length*2);
        }
        element[size++] = value;
    }
    public void bubbleSort(){
        for(int i = 0;i<element.length;i++){
            for (int j = 0; j < element.length-1-i; j++) {
                if(element[j].compareTo(element[j+1])>0){
                    TestDemo.swap(element,j,j+1);
                }
            }
        }
    }

extends主要限定泛型参数的上界(常见如下):

  • <T extends 基类>://只能是基类或者基类的派生类
  • <T extends 基接口>//只能是实现基接口的派生类

今天也要好好学习呀~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹿可可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值