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

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

image.png

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

泛型

什么是泛型

泛型的分类

泛型的定义简单演示

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

泛型类的使用

泛型总结

包装类

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

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

List的使用

List常用方法

使用示例

自动发牌案例

泛型

什么是泛型

泛型:

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


优点:

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


泛型的分类

泛型类

泛型方法

泛型的定义简单演示

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

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

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

image.png

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

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


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


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


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


泛型的意义:

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

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


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


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

面试问题:

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

泛型类的使用

image.png

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

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


注意:


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

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

泛型总结

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

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

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

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

包装类

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


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


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

image.png

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

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

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



image.png

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

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

List的使用

List常用方法

image.png

使用示例

image.png

运行结果如下:

image.png

自动发牌案例

分为三个java文件

image.png

image.png

image.png

image.png


相关文章
|
11天前
|
消息中间件 NoSQL Redis
redis数据结构-List
redis数据结构-List
26 1
|
17天前
|
安全 Java 容器
【Java集合类面试二十七】、谈谈CopyOnWriteArrayList的原理
CopyOnWriteArrayList是一种线程安全的ArrayList,通过在写操作时复制新数组来保证线程安全,适用于读多写少的场景,但可能因内存占用和无法保证实时性而有性能问题。
|
17天前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
17天前
|
Java
【Java集合类面试二十八】、说一说TreeSet和HashSet的区别
HashSet基于哈希表实现,无序且可以有一个null元素;TreeSet基于红黑树实现,支持排序,不允许null元素。
|
17天前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
17天前
|
Java
【Java集合类面试二十六】、介绍一下ArrayList的数据结构?
ArrayList是基于可动态扩展的数组实现的,支持快速随机访问,但在插入和删除操作时可能需要数组复制而性能较差。
|
17天前
|
存储 Java 索引
【Java集合类面试二十四】、ArrayList和LinkedList有什么区别?
ArrayList基于动态数组实现,支持快速随机访问;LinkedList基于双向链表实现,插入和删除操作更高效,但占用更多内存。
|
8天前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
23 5
|
8天前
|
存储 Java 程序员
Java中的集合框架:从入门到精通
【8月更文挑战第30天】在Java的世界里,集合框架是一块基石,它不仅承载着数据的存储和操作,还体现了面向对象编程的精髓。本篇文章将带你遨游Java集合框架的海洋,从基础概念到高级应用,一步步揭示它的奥秘。你将学会如何选择合适的集合类型,掌握集合的遍历技巧,以及理解集合框架背后的设计哲学。让我们一起探索这个强大工具,解锁数据结构的新视角。
|
9天前
|
存储 算法 Java
Java中的集合框架深度解析云上守护:云计算与网络安全的协同进化
【8月更文挑战第29天】在Java的世界中,集合框架是数据结构的代言人。它不仅让数据存储变得优雅而高效,还为程序员提供了一套丰富的工具箱。本文将带你深入理解集合框架的设计哲学,探索其背后的原理,并分享一些实用的使用技巧。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往高效编程的大门。
下一篇
DDNS