Java——泛型

        什么是泛型?为什么会有泛型的出现?

        一般的类和方法,只能使用一种具体的类型,要么是基本类型,要么是引用类型,或者是自定义的类,但是有没有一个类(方法),可以同时满足不同类型的参数呢。这就引出了泛型!通俗的讲,泛型就是适用于许多许多类型。

泛型类的语法格式:

    //这里的 T 可以是任意一种类型
    class 泛型类名称 <T>{
        //这里可以使用类型参数
    }

    //实例
    class MyArray <T>{
        pubilc T[]array = (T[])new Object[10];
    }
    //泛型类的使用
    public class Test{
        MyArray<Integer> myArray = new MyArray<>();
    }

泛型方法的语法格式:

// T 是任意一种引用类型
    方法限定符 <T> 返回值类型 方法名称(形参列表){
       //方法体
    }

//实例
    public <T> void swap(T[] array,int i,int j){
        T tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }

注意:泛型中的<T>处只能用引用类型,不能使用基本类型。

如果要使用基本类型,需要使用他们的包装类:

byte -> Byte、short -> Short、int -> Integer、char -> Character、long -> Long、boolean -> Boolean、float -> Float

        不仅类可以使用泛型,方法也可以,并且方法使用泛型和类使用泛型也很相似,下面用泛型写一个冒泡排序举例:

        一个int类型数组的冒泡排序和一个自定义类Student的冒泡排序:

public class Demo {
    static class Student{
        public String name;
        public int age;

        public Student(String name,int age){
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString(){
            return "学生{" + "name: " + name + " age: " + age + "}";
        }
    }
//带泛型的比较方法
    public static <T> int compare(T s1,T s2){
        Student a1 = (Student) s1;
        Student a2 = (Student) s2;
        if(a1.age > a2.age){
            return 1;
        }else if(a1.age < a2.age){
            return -1;
        }else{
            return 0;
        }
    }
//带泛型的交换方法
    public static <T> void swap(T[]array,int i,int j){
        T tmp = array[i];
        array[i] = array[j];
        array[j] = tmp;
    }
    //带泛型的冒泡排序
    public static <T> void bubbleSort(T[] array){
        for(int i = 0;i < array.length - 1;i++){
            for(int j = 0;j < array.length - i - 1;j++){
//必须写一个比较方法,不能直接进行比较
                T s1 = array[j];
                T s2 = array[j + 1];
                int tmp = compare(s1,s2);
                if(tmp > 0){
                    swap(array,j,j + 1);
                }
            }
        }
    }
    //不带泛型的冒泡排序
    public static void bubbleSort(int[] array){
        for(int i = 0;i < array.length - 1;i++){
            for(int j = 0;j < array.length - i - 1;j++){
                int tmp = 0;
                if(array[j] > array[j + 1]){
                    tmp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = tmp;
                }
            }
        }
    }

    public static void main(String[] args) {
//输出结果:[1, 2, 4, 5, 6, 9]
        int[] a1 = {1,6,2,9,4,5};
        bubbleSort(a1);
        System.out.println(Arrays.toString(a1));

//输出结果:[学生{name: 钱六 age: 8}, 学生{name: 王五 age: 17}, 学生{name: 张三 age: 18}, 学生{name: 李四 age: 20}]
        Student[] array = {
                new Student("张三",18),
                new Student("李四",20),
                new Student("王五",17),
                new Student("钱六",8),
        };
        bubbleSort(array);
        System.out.println(Arrays.toString(array));
    }
}

注意:Java的泛型只在编译阶段起作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值