【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

泛型

什么是泛型

泛型的分类

泛型的定义简单演示

泛型背后作用时期和背后的简单原理

泛型类的使用

泛型总结

包装类

基本数据类型和包装类直接的对应关系

包装类的使用,装箱(boxing)和拆箱(unboxing)

List的使用

List常用方法

使用示例

自动发牌案例

泛型

什么是泛型

泛型:

即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型是在C#2.0引入的。泛型(Genericity)的字面意思是指具有在多种数据类型上皆可操作的含意,与模板有些相似。


优点:

泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用与集合以及作用于集合的方法一起使用。


泛型的分类

泛型类

泛型方法

泛型的定义简单演示

1. 尖括号 <> 是泛型的标志

2. E 是类型变量(Type Variable),变量名一般要大写

3. E 在定义时是形参,代表的意思是 MyArrayList 最终传入的类型,但现在还不知道

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

泛型背后作用时期和背后的简单原理

泛型是作用在编译期间的一种机制,即运行期间没有泛型的概念。


泛型代码在运行期间,就是我们上面提到的,利用 Object 达到的效果(这里不是很准确,后期会专门写一篇博客讲泛型)。


< T > 代表当前类是一个泛型类。


new T[10]; 不能new泛型类型的数组 T[] t = new T[];


泛型的意义:

①在存储元素的时候,可以自动进行类型检查

②在获取元素的时候,可以进行自动类型的转换


泛型类型的参数:不能是简单类型


泛型类型的参数,是不参与类型的组成的

面试问题:

  • 泛型到底是怎么编译的?
  • 1、泛型只在编译的时候,起作用。在运行的时候,是没有泛型的概念的!!!
  • 2、擦除机制 -> Object -> 不严谨-> 我们可以给定一个擦除边界

泛型类的使用

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

通过以上代码,我们可以看到泛型类的一个使用方式:

只需要在所有类型后边跟尖括号,并且尖括号内是人为限定所需要传入的类型,即 E 可以看作的最后的类型。


注意:


Book 只能想象成 E 的类型,但实际上 E 的类型还是 Object。

Java中的泛型仅仅是一个编译时的概念,在运行时,所有的泛型信息都被消除了,这被称为泛型擦除。

泛型总结

泛型是为了解决某些容器、算法等代码的通用性而引入,并且 能在编译期间做类型检查,如果用使用Object类,当传入了非法参数时,编译器是不会报错的。

泛型利用的是 Object 是所有类的祖先类,并且父类的引用可以指向子类对象的特定而工作。

泛型是一种编译期间的机制,即 MyArrayList<Person> 和 MyArrayList<Book> 在运行期间是一个类型。

泛型是 java 中的一种合法语法,标志就是尖括号 < >

包装类

Object 引用可以指向任意类型的对象,但有例外出现了,8 种基本数据类型不是对象,那岂不是刚才的泛型机制要失效了?


实际上也确实如此,为了解决这个问题,java 引入了一类特殊的类,即这 8 种基本数据类型的包装类,在使用过程中,会将类似 int 这样的值包装到一个对象中去


基本数据类型和包装类直接的对应关系

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

基本就是类型的首字母大写,除了 Integer 和 Character。

包装类的使用,装箱(boxing)和拆箱(unboxing)

手动装箱 也有 自动装箱拆箱 也一样



【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

可以看到在使用过程中,装箱和拆箱带来不少的代码量,所以为了减少开发者的负担,java 提供了自动机制。

注意:自动装箱和自动拆箱是工作在编译期间的一种机制

List的使用

List常用方法

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

使用示例

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

运行结果如下:

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

自动发牌案例

分为三个java文件

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)

【Java数据结构】初识集合框架——List的使用(附加自动发牌案例)


上一篇:【Java】面向对象之——接口的理解


下一篇:【Java】如何提高算法效率——时间复杂度和空间复杂度