泛型集合的概念

1、泛型集合

        任何一个集合默认存储的元素类型是Object类型,Object是一种通用的数据类型

        语法:在接口和类名的后面使用一对<>填入我们想要的约束的具体类型,泛型其实就是一种类型的约束机制。

        JAVA中的泛型的制定是给编译器看的,编译器会根据用户制定的类型对将来存储的每个元素进行强制类型的检查,对于不符合类型要求的数据不允许存入集合中。使用集合的时候一定要制定泛型

//左右两边的泛型必须完全一样
List<Student> stdudents = new ArrayList<Student>();
//泛型的自动推断来简化代码的编写
List<Student> students = new ArrayList<>();

        在Java中泛型集合是用来存储元素的集合,它们允许存储不同类型的元素,并且提供了安全、高效和类型检查等特性。

Java中常见的泛型集合有:

1. ArrayList<E>:可增长大小的数组实现,它可以存储任何类型的元素。

2. LinkedList<E>:双向链表实现,它可以存储任何类型的元素。

3. HashSet<E>:基于哈希表的集合实现,它可以存储任何类型的元素。

4. TreeSet<E>:基于红黑树的有序集合实现,它可以存储任何类型的元素。

5. HashMap<K,V>:基于哈希表的键值对集合实现,它可以存储任何类型的键和值。

6. TreeMap<K,V>:基于红黑树的有序键值对集合实现,它可以存储任何类型的键和值。

       这些泛型集合允许存储任何类型的元素,所以在使用时需要指定泛型类型。例如,ArrayList<String> 表示一个存储字符串的 ArrayList。在使用泛型集合时,可以避免向集合中添加不兼容的元素或者避免使用时进行类型转换的问题。

1.2自定义泛型

1.2.1自定义泛型类

        在Java中,可以使用泛型来创建自定义泛型类。自定义泛型类可以定义一个或多个类型参数,以提高代码复用性和可读性。以下是一个简单的自定义泛型类的示例:

public class MyGenericClass<T> {
    private T data;

    public MyGenericClass(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

        在上面的示例中定义了一个MyGenericClass类,它具有一个类型参数T。MyGenericClass类拥有一个名为data的变量,它的类型为T。构造函数和getter/setter方法都使用泛型类型T。通过这种方式,MyGenericClass可以适配各种不同的数据类型,可以用T表示任意类型。

下面是一个使用自定义泛型类的示例:
 

MyGenericClass<Integer> intClass = new MyGenericClass<Integer>(100);
MyGenericClass<String> strClass = new MyGenericClass<String>("Hello");

Integer i = intClass.getData();
String s = strClass.getData();

        在此示例中,我们实例化了两个MyGenericClass对象,一个用于存储整数,另一个用于存储字符串。在实例化时,我们使用了具体的类型参数,即Integer和String。然后我们通过getData()方法获取了存储的整数和字符串。

        需要注意的是,泛型类在编译时会被擦除,这意味着泛型类的类型参数在运行时不会被保留。因此,在使用自定义泛型类时,类型参数应该被指定为具体的类型,以避免类型转换或系统报错。

1.2.2自定义泛型接口

        在Java中,可以创建自定义泛型接口以提高代码重用性和灵活性。自定义泛型接口可以定义一个或多个类型参数,这些类型参数可以在接口内部使用,使得接口的实现可以适应不同类型的数据。

public interface MyInterface<T,R> {
void test1(String s);
R test2(T o);
}

        和类不一样,接口定义后不能直接创建对象,

public class MyIterfaceImpl implements MyInterface<String,String>
{
    @Override
    public void test1(String s) {
    // TODO Auto-generated method stub
    }
    @Override
    public String test2(String o) {
    // TODO Auto-generated method stub
    return null;
    }
}
class MyInterfaceImpl2 implements MyInterface<Integer,Double>{
    @Override
    public void test1(String s) {
    // TODO Auto-generated method stub
    }
    @Override
    public Double test2(Integer o) {
    // TODO Auto-generated method stub
    return null;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值