【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


相关文章
|
2月前
|
消息中间件 算法 安全
JUC并发—1.Java集合包底层源码剖析
本文主要对JDK中的集合包源码进行了剖析。
|
13天前
|
存储 安全 算法
Java 集合面试题 PDF 下载及高频考点解析
本文围绕Java集合面试题展开,详细解析了集合框架的基本概念、常见集合类的特点与应用场景。内容涵盖`ArrayList`与`LinkedList`的区别、`HashSet`与`TreeSet`的对比、`HashMap`与`ConcurrentHashMap`的线程安全性分析等。通过技术方案与应用实例,帮助读者深入理解集合类的特性和使用场景,提升解决实际开发问题的能力。文末附带资源链接,供进一步学习参考。
26 4
|
16天前
|
存储 安全 Java
现代应用场景中 Java 集合框架的核心技术与实践要点
本内容聚焦Java 17及最新技术趋势,通过实例解析Java集合框架的高级用法与性能优化。涵盖Record类简化数据模型、集合工厂方法创建不可变集合、HashMap初始容量调优、ConcurrentHashMap高效并发处理、Stream API复杂数据操作与并行流、TreeMap自定义排序等核心知识点。同时引入JMH微基准测试与VisualVM工具分析性能,总结现代集合框架最佳实践,如泛型使用、合适集合类型选择及线程安全策略。结合实际案例,助你深入掌握Java集合框架的高效应用与优化技巧。
38 4
|
16天前
|
存储 安全 Java
Java 集合面试题从数据结构到 HashMap 源码剖析详解及长尾考点梳理
本文深入解析Java集合框架,涵盖基础概念、常见集合类型及HashMap的底层数据结构与源码实现。从Collection、Map到Iterator接口,逐一剖析其特性与应用场景。重点解读HashMap在JDK1.7与1.8中的数据结构演变,包括数组+链表+红黑树优化,以及put方法和扩容机制的实现细节。结合订单管理与用户权限管理等实际案例,展示集合框架的应用价值,助你全面掌握相关知识,轻松应对面试与开发需求。
73 3
|
2月前
|
存储 安全 Java
Java 集合框架详解:系统化分析与高级应用
本文深入解析Java集合框架,涵盖List、Set、Map等核心接口及其常见实现类,如ArrayList、HashSet、HashMap等。通过对比不同集合类型的特性与应用场景,帮助开发者选择最优方案。同时介绍Iterator迭代机制、Collections工具类及Stream API等高级功能,提升代码效率与可维护性。适合初学者与进阶开发者系统学习与实践。
81 0
|
20天前
|
算法 Java 调度
Java多线程基础
本文主要讲解多线程相关知识,分为两部分。第一部分涵盖多线程概念(并发与并行、进程与线程)、Java程序运行原理(JVM启动多线程特性)、实现多线程的两种方式(继承Thread类与实现Runnable接口)及其区别。第二部分涉及线程同步(同步锁的应用场景与代码示例)及线程间通信(wait()与notify()方法的使用)。通过多个Demo代码实例,深入浅出地解析多线程的核心知识点,帮助读者掌握其实现与应用技巧。
|
4月前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
271 60
【Java并发】【线程池】带你从0-1入门线程池
|
2月前
|
Java 中间件 调度
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
本文涉及InheritableThreadLocal和TTL,从源码的角度,分别分析它们是怎么实现父子线程传递的。建议先了解ThreadLocal。
103 4
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
|
1月前
|
Java
java 多线程异常处理
本文介绍了Java中ThreadGroup的异常处理机制,重点讲解UncaughtExceptionHandler的使用。通过示例代码展示了当线程的run()方法抛出未捕获异常时,JVM如何依次查找并调用线程的异常处理器、线程组的uncaughtException方法或默认异常处理器。文章还提供了具体代码和输出结果,帮助理解不同处理器的优先级与执行逻辑。
|
29天前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
71 0
下一篇
oss创建bucket