学习博客:Java集合框架之泛型

Java泛型是JDK1.5引入的新特性,本质是参数化类型,将类型作为参数传递

常见形式:泛型类、泛型接口、泛型方法

语法:<T,…> T称为类型占位符,表示一种引用类型,通常有E、K、V

优势:提高代码重用性、防止类型转换异常、提高代码安全性

1.泛型类

/**
 * 泛型类
 * 语法:类名<T>
 * T是类型占位符,表示一种引用类型,可以使用多个 <T,E,K,V,...>
 */

public class MyGeneric<T> {
    //使用泛型T
    //创建类型
    T t;

    //泛型作为方法的参数
    public void show(T t){
        System.out.println(t);
    }

    //泛型作为方法的返回值
    public T getT(){
        return t;
    }
}

创建测试类

public class TestGeneric {
    public static void main(String[] args) {
        //使用泛型类创建对象
        MyGeneric<String> myGeneric = new MyGeneric<String>();
        myGeneric.t = "hi,java";
        myGeneric.show("hi,php");
        String string = myGeneric.getT();
        System.out.println(string);

        MyGeneric<Integer> myGeneric2 = new MyGeneric<Integer>();
        myGeneric2.t = 10;
        myGeneric2.show(20);
        Integer integer = myGeneric2.getT();
        System.out.println(integer);
    }
}

在这里插入图片描述
注意点

1.泛型只能使用引用类型
2.不同泛型类型对象之间不能相互赋值

2.泛型接口

创建一个泛型接口

/**
 * 泛型接口
 * 语法:接口名<T>
 * 不能泛型静态常量
 */

public interface MyInterface<T>{
    String name = "杨洋";

    T server(T t);
}

创建接口的实现类
不可选择类型

public class MyInterfaceImpl implements MyInterface<String>{

    @Override
    public String server(String t) {
        System.out.println(t);
        return t;
    }
}

可选择类型

public class MyInterfaceImpl2<T> implements MyInterface<T> {

    @Override
    public T server(T t) {
        System.out.println(t);
        return t;
    }
}

测试类

public class TestGeneric {
    public static void main(String[] args) {
    	//不可选择类型实现  String
        MyInterfaceImpl impl = new MyInterfaceImpl();
        impl.server("runrunrun");

		//可选择类型实现
        MyInterfaceImpl2<Integer> impl2 = new MyInterfaceImpl2<>();
        impl2.server(999);
    }
}

在这里插入图片描述

3.泛型方法

/**
 * 泛型方法
 * 语法:<T>方法返回值类型
 */

public class MyGenericMethod {
    //泛型方法
    public <T> T show(T t) {
        System.out.println("泛型方法: " + "(" + t.getClass().getTypeName() + "):" + t);
        return t;
    }
}

测试类

public class TestGeneric {
    public static void main(String[] args) {
        //泛型方法
        MyGenericMethod myGenericMethod = new MyGenericMethod();
        myGenericMethod.show("sin");
        myGenericMethod.show(100);
        myGenericMethod.show(3.14);
        myGenericMethod.show(true);
    }
}

在这里插入图片描述

4.泛型集合

参数化类型、类型安全的集合,强制集合元素的类型必须一致

1.编译时即可检查,而非运行时抛出异常
2.访问时,不必类型转换(拆箱)
3.不同泛型之间引用不能相互赋值,泛型不存在多态

创建一个Animals类

import java.util.Objects;

public class Animals {
    private String name;
    private int age;
    private String shout;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getShout() {
        return shout;
    }

    public void setShout(String shout) {
        this.shout = shout;
    }

    //重写toString方法
    @Override
    public String toString() {
        return "Animals{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", shout='" + shout + '\'' +
                '}';
    }

    //重写equals方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Animals animals = (Animals) o;
        return age == animals.age && Objects.equals(name, animals.name) && Objects.equals(shout, animals.shout);
    }
}

创建测试类

import java.util.ArrayList;
import java.util.ListIterator;

public class Demo {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("haha");
        arrayList.add("hehe");

        for (String string: arrayList) {
            System.out.println(string);
        }

        ArrayList<Animals> arrayList2 = new ArrayList<>();
        Animals lion = new Animals("狮",4,"qqq");
        Animals tiger = new Animals("虎",4,"www");
        Animals dove= new Animals("鸽",4,"eee");
        arrayList2.add(lion);
        arrayList2.add(tiger);
        arrayList2.add(dove);

        ListIterator<Animals> it = arrayList2.listIterator();
        while(it.hasNext()){
            Animals s = it.next();
            System.out.println(s);
        }
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值