Java List 中存不同的数据类型
在最近的实践中,有人突然问了一个问题:
在 Java 的 List 中可以存不同的数据类型吗?
这个问题突然给问到了,我们都知道 Java 中的 List 中存的是对象,通常我们定义都会这样的定义:
List<String> testList = new ArrayList<>(); 这样我们就知道了 testList 中存的对象都是 String 字符串了。
解答
List 中是可以存不同的数据类型的。
但是在定义的时候需要定义成: List testList = new ArrayList<>();,不能为要使用的 List 指定数据类型。
当为我们使用的 List 不指定数据类型的话,所有存到 List 中的对象都会被转换为 Object 类型。
而当我门再从list 中取出该数据时,就会发现数据类型已经改变。
Objec t类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类。
例如下面的代码:
List testList = new ArrayList<>();testList.add(1L);testList.add("iSharkFly");testList.add(2);
因为我们没有为我们的 List 指定数据类型,那么这个 List 内是可以放任何数据类型的,你甚至可以放一个对象进去也没有问题的。
上面的代码编译器是不会报错的。
但是在 Get 对象的时候,编译器会明确的告诉你类型不匹配,我们 Get 的是一个 Object 对象,但是你尝试把 Object 对象转换为其他类型,这个时候编译器是不会让你通过的。

这个时候需要进行类型转换才可以。
把上面 Object 对象,强制类型转换下。
Long index0 = (Long) testList.get(0);String index1 = (String) testList.get(1);
强制类型
如果我们在定义 List 的时候,强制定义类型:
List<String> testList = new ArrayList<>();
那么上面的额代码就会出错了。

编译器会告诉你,在这里我们需要的是一个 String 类型,但是你提供的是 Long 或者其他不是 String 类型。
我们在把数据插入到 List 中的时候,需要把类型先转换一下。
使用下面的代码
testList.add(String.valueOf(1L) );testList.add("iSharkFly");testList.add(String.valueOf(2));testList.forEach(e -> log.debug("{}", e));
就可以完成类型的转换了。
实战
在实际的编码中,我们通常都会为我们的 List 指定数据类型。
这个数据类型可以是任何数据类型或者对象,这样可以保证我们的 List 中存的数据类型只有一种数据类型。
这样在后期的数据遍历和处理过程中,我们就不需要再对数据类型进行转换了,这是一个常规的操作。
简单来说就是:先对数据进行转换,后存储,再使用。
我们会尽量避免在使用的时候对数据进行转换,例如上面的情况,我们 List 对象中存的是对象,我们不知道我们的对象是 Stirng 还是 Long,这个时候要猜。
如在使用的时候进行数据类型转换,就比较容易出现类型转换方面的错误了,所以我们会先定义好。
Java List 中存不同的数据类型 - Java - iSharkFly
相关文章:
Java List 中存不同的数据类型
在最近的实践中,有人突然问了一个问题: 在 Java 的 List 中可以存不同的数据类型吗? 这个问题突然给问到了,我们都知道 Java 中的 List 中存的是对象,通常我们定义都会这样的定义: List<String> t…...
pyqt5:openpyxl 读取 Excel文件,显示在 QTableWidget 中
pip install openpyxl openpyxl-3.1.2-py2.py3-none-any.whl (249 kB) et_xmlfile-1.1.0-py3-none-any.whl (4.7 kB) 摘要:A Python library to read/write Excel 2010 xlsx/xlsm files pip install pyqt5; pip install pyqt5-tools; 编写 openpyxl_pyqt5.py 如…...
在RabbitMQ中使用新的MQTT 5.0功能
MQTT是物联网(IoT)的标准协议,是轻量级的,协议头很小,可以节省网络带宽。MQTT也很有效,与其他消息传递协议相比,客户端通过更短的握手进行连接和身份验证。 以下是本文介绍的MQTT 5.0功能列表&…...
flinkcdc 体验
0 flink版本 踩雷 java代码操作 flink Table/SQL API 和 DataStream API 编写程序后,打成jar包丢到flink集群运行,报错首选需要考虑flink集群版本和 jar包中maven依赖的版本是否一致。 目前网上flink、flinkcdc相关博文绝大部分是基于flink1.13、1.14编…...
Kafka知识补充
如何避免 Rebalance 最简单粗暴的就是 : 减少组成员数量发生变化 每个 Consumer 实例都会定期地向 Coordinator 发送心跳请求,表明它还存活着。如果某个 Consumer 实例不能及时地发送这些心跳请求,Coordinator 就会认为该 Consumer 已经“死…...
【MAC】升级 Mac os 后报错
背景 17 年买的 mac,发现很多软件都无法安装,于是升级 mac os 到 10.13,从官网下载 10.13 版本,之后升级,升级还算顺利。但使用 git 的时候发现出现问题了。 问题 使用 git 出现如下错误 xcrun: error: invalid ac…...
LeetCode(力扣)416. 分割等和子集Python
LeetCode416. 分割等和子集 题目链接代码 题目链接 https://leetcode.cn/problems/partition-equal-subset-sum/ 代码 class Solution:def canPartition(self, nums: List[int]) -> bool:sum 0dp [0]*10001for num in nums:sum numif sum % 2 1:return Falsetarget …...
Redis之缓存一致性
Redis之缓存一致性 1 缓存更新策略1.1 内存淘汰1.2 过期删除1.3 主动更新1.4 三种缓存更新策略的对比 2 更新缓存的两种方式3 缓存更新策略的实现方式3.1 先更新DB,后更新缓存3.2 先更新DB,后删除缓存3.3 先更新缓存,后更新DB3.4 先删除缓存&…...
LeetCode-199-二叉树的右视图
题目描述: 题目链接:LeetCode-199-二叉树的右视图 解题思路: 在 102 的基础之上进行改进,一维数组每次只保存 size1 时候的值 代码实现: class Solution {public List<Integer> rightSideView(TreeNode root) {i…...
二叉树的最近公共祖先
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻强烈推荐优质专栏: 🍔🍟🌯C的世界(持续更新中) 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔…...
C++ 补充 反向迭代器的实现
阅前提要: 本文主要是对list和vector的实现的补充,以代码实现为主,注释为辅,如果对vector,list底层实现感兴趣的可以自行阅读,代码量有点大,请大家耐心查看,对理解语言很有帮助&…...
JVM第一讲:JVM相关知识体系详解+面试(P6熟练 P7精通)
JVM相关知识体系详解面试(P6熟练 P7精通) 面试时常常被面试官问到JVM相关的问题。本系列将给大家构建JVM核心知识点全局知识体系,本文是JVM第一讲,JVM相关知识体系详解和相关面试题梳理。 文章目录 JVM相关知识体系详解面试(P6熟练 P7精通)1、JVM学习建议…...
深度学习DAY3:FFNNLM前馈神经网络语言模型
1 神经网络语言模型NNLM的提出 文章:自然语言处理中的语言模型预训练方法(ELMo、GPT和BERT) https://www.cnblogs.com/robert-dlut/p/9824346.html 语言模型不需要人工标注语料(属于自监督模型),所以语言…...
JavaSE学习值之--String类
💕"不要同情自己,同情自己是卑劣懦夫的勾当!"💕 作者:Mylvzi 文章主要内容:JavaSE学习值之--String类 目录 前言: 一.String类 1.String类的属性 2.字符串的构造 注意…...
【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题
文章目录 【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题⛅前言员工的直属部门🔒题目🔑题解 判断三角形🔒题目🔑题解 连续出现的数字🔒题目🔑题解 指定日期的产品价格🔒题目&am…...
基于单片机的汽车智能仪表的设计
基于单片机的汽车智能仪表的设计 摘要:汽车的汽车系统。速度测量以及调速是我们这次的设计所要研究的对象,本次设计的基础核心的模块就是单片机,其应用的核心的控制单元就是stc89c52单片机,用到的测速模块是霍尔传感器,…...
【Docker 内核详解】namespace 资源隔离(一):进行 namespace API 操作的 4 种方式
namespace 资源隔离(一):进行 namespace API 操作的 4 种方式 1.通过 clone() 在创建新进程的同时创建 namespace2.查看 /proc/[pid]/ns 文件3.通过 setns() 加入一个已经存在的 namespace4.通过 unshare() 在原先进程上进行 namespace 隔离5…...
【技术研究】环境可控型原子力显微镜超高真空度精密控制解决方案
摘要:针对原子力显微镜对真空度和气氛环境精密控制要求,本文提出了精密控制解决方案。解决方案基于闭环动态平衡法,在低真空控制时采用恒定进气流量并调节排气流量的方法,在高真空和超高真空控制时则采用恒定排气流量并调节进气流…...
【Vuex+ElementUI】Vuex中取值存值以及异步加载的使用
一、导言 1、引言 Vuex是一个用于Vue.js应用程序的状态管理模式和库。它建立在Vue.js的响应式系统之上,提供了一种集中管理应用程序状态的方式。使用Vuex,您可以将应用程序的状态存储在一个单一的位置(即“存储”)中,…...
python经典百题之简单加密数据
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下: 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换 程序分析 对于…...
无网环境部署:OpenClaw离线安装Qwen3-14B镜像指南
无网环境部署:OpenClaw离线安装Qwen3-14B镜像指南 1. 为什么需要离线部署方案 在金融、政务等对数据安全要求极高的领域,服务器通常运行在严格的Air-gap环境(物理隔离网络)中。去年我在某金融机构做POC时,就遇到了这…...
如何永久保存你的数字生活记忆:WeChatMsg数据守护终极指南
如何永久保存你的数字生活记忆:WeChatMsg数据守护终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...
14. 家庭电路模拟器
3. 家庭电路模拟器 功能介绍: 模拟家庭电路中电灯、插座、电器的连接方式。用户可以点击开关来控制灯泡的亮灭,演示“火线进开关,零线进灯座”的正确接法。通过动态电流流动效果,展示电流从火线流向零线的过程,并模拟短路和过载时的跳闸保护机制,是安全用电教学的绝佳工…...
Hyperf方案 Kubernetes部署
<?php /*** 案例标题:Kubernetes部署* 说明:K8s deployment/service/configmap yaml配置,含滚动更新、资源限制、健康探针* 需要安装的包:无需PHP包,这是K8s YAML配置文件*/// k8s/namespace.yaml /* apiVersion…...
分离调试文件完整指南:为什么构建ID验证对Bloaty二进制分析至关重要
分离调试文件完整指南:为什么构建ID验证对Bloaty二进制分析至关重要 【免费下载链接】bloaty Bloaty: a size profiler for binaries 项目地址: https://gitcode.com/gh_mirrors/bl/bloaty 作为专业的二进制大小分析工具,Bloaty能够深入剖析ELF、…...
突破音乐格式限制的全方位解决方案:让你的音频文件重获自由
突破音乐格式限制的全方位解决方案:让你的音频文件重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: …...
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
升级方式通过 PECL 安装:pecl install openswoole-26.2.0或使用 Docker 镜像:docker pull openswoole/openswoole:26.2-php8.5-alpine新特性PHP 8.5 支持OpenSwoole 26.2.0 完全兼容 PHP 8.5,支持管道操作符、URI 扩展、Clone With 等新特性。…...
Transformer原理探讨
Transformer模型自2017年Google提出以来,已成为深度学习领域最核心的架构之一,推动了自然语言处理、计算机视觉等领域的革命性发展。本教程将系统性地从零开始解析Transformer的原理与架构,帮助您深入理解这一改变AI格局的模型。 核心学习路径: 掌握序列建模背景知识与Tra…...
二、PXE+Kickstart 无人值守批量部署操作系统;使用物理路由器的dhcp:ProxyDHCP+TFTP+HTTP+Kickstart应答文件(VMware测试环境)
前文不使用物理设备的 DHCP ,选择自行安装 DHCP 服务进行的PXEKickstart 无人值守部署操作系统的方法难以适用于家庭或企业环境,本文尝试一种使用物理设备(家庭路由器、企业交换机)的DHCP功能批量部署物理机操作系统的方案。 建议…...
跨平台资源下载终极方案:res-downloader如何破解多平台内容获取难题
跨平台资源下载终极方案:res-downloader如何破解多平台内容获取难题 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader …...
