首页 > 编程语言 >Java中 Arrays.asList() 处理基本数据类型数组和包装类型数组的差异

Java中 Arrays.asList() 处理基本数据类型数组和包装类型数组的差异

时间:2024-04-09 16:02:10浏览次数:38  
标签:Java Arrays 数据类型 包装 数组 类型 asList

文章目录


前言

在使用 Java 中的 Arrays.asList() 方法时,我们可能会发现它对基本数据类型数组包装类型数组的处理方式存在一些差异。这种差异体现了 Java 在基本数据类型和包装类型之间的设计权衡,以及 Arrays.asList() 方法试图为不同类型的数组提供最佳的转换体验。让我们来深入探讨这个差异的原因。

int[] myArray = {1, 2, 3};
List myList = Arrays.asList(myArray);
System.out.println(myList.size());//1
System.out.println(myList.get(0));//数组地址值
System.out.println(myList.get(1));//报错:ArrayIndexOutOfBoundsException
int[] array = (int[]) myList.get(0);
System.out.println(array[0]);//1

Integer[] myArray2 = {1, 2, 3};
List myList2 = Arrays.asList(myArray2);
System.out.println(myList2.size());//3
System.out.println(myList2.get(0));//1
System.out.println(myList2.get(1));//2

一、基本数据类型数组和包装类型数组的区别

在 Java 中,我们有两种类型的数组:

  • 基本数据类型数组(如 int[], double[], char[] 等),基本数据类型是 Java 语言中最基础的数据类型,它们占用较小的内存空间,访问速度也较快。
  • 包装类型数组(如 Integer[], Double[], Character[] 等),包装类型则是基本数据类型的"包装类",是对象类型,占用较大的内存空间,访问速度也较慢。

二、Arrays.asList() 对这两种数组的处理方式

当我们使用 Arrays.asList() 方法时,它的内部实现会根据传入的数组类型做出不同的处理:

  • 如果传入的是基本数据类型数组(如 int[]),asList() 方法会将整个数组作为 List 的单个元素返回。
  • 但如果传入的是包装类型数组(如 Integer[]),asList() 方法会将数组中的每个元素都作为 List 的单个元素返回。

这个差异的原因在于:

  • 基本数据类型数组(int[])是一种"同质"的数据结构,它们在内存中占用连续的空间,更适合作为单个元素存储在 List 中。
  • 而包装类型数组(Integer[])是一种"异质"的数据结构,每个元素都是一个独立的对象,占用不同的内存空间,更适合作为 List 的独立元素。

所以 Arrays.asList() 方法对这两种数组的处理方式是不同的,以更好地适应它们的内部实现机制。


总结

Java 中基本数据类型和包装类型之间的设计权衡,以及 Arrays.asList() 方法试图为不同类型的数组提供最佳的转换体验,导致了它们在处理基本数据类型数组和包装类型数组时的差异。理解这种差异有助于我们更好地使用 Arrays.asList() 方法,并为自己的代码选择更合适的数组类型。

标签:Java,Arrays,数据类型,包装,数组,类型,asList
From: https://blog.csdn.net/weixin_43992505/article/details/137552941

相关文章

  • JAVA语言学习-Day6
    程序、进程、线程程序:指令与数据的有序集合,静态概念进程:执行程序的一次执行过程,动态概念。是系统分配资源的单位线程:一个进程中至少包含一个线程,通常一个进程中有若干个线程。线程是cpu调度和执行的单位线程的创建继承thread类实现runnable接口实现callable接口线......
  • java设计模式回忆录
    java设计模式一.概念:在软件开发过程中的,经过验证的,在特定环境下重复发生特定问题的解决方案二.原则:OOP七项原则solid五项:功能的单一职责原则、开闭原则(便于扩展)、里氏替代原则(子类内代替父类)、接口隔离原则、依赖导致原则(依赖接口)迪米特原则(最小知道原则)、合成复用原则(用组合......
  • java计算机毕业设计元气花艺小程序【附源码+远程部署+程序+mysql】
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景在现代社会中,随着生活节奏的加快和城市化进程的推进,人们越来越渴望亲近自然、缓解压力。花艺作为一种艺术形式和生活方式,因其独特的审美价值和情感表达功......
  • java计算机毕业设计基于微信小程序的疫情封闭小区自助采购系统【附源码+远程部署+程序
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在新冠疫情的持续影响下,全球范围内的居民生活受到了前所未有的挑战。为了防控疫情的扩散,许多国家和地区不得不采取了封闭管理的措施,限制人员的流动和聚集......
  • java计算机毕业设计基于微信小程序的瑜伽馆约课系统【附源码+远程部署+程序+mysql】
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义标题:基于微信小程序的瑜伽馆约课系统开发在现代都市生活的快节奏中,人们越来越注重身心健康与内在平衡。瑜伽作为一种集身体锻炼、心理放松与精神修养于一体的活动......
  • java stream流 获取最后一条数据
    JavaStream流获取最后一条数据在Java中,Stream是一种用于处理集合数据的抽象概念。Stream提供了一种函数式编程的方式来操作数据,可以通过一系列的操作来处理集合中的元素。本文将介绍如何使用JavaStream流获取最后一条数据。什么是JavaStream流JavaStream是Java8中引入的一......
  • java 对Map<String, Object>遍历
    在Java中,你可以使用多种方法来遍历Map<String,Object>。以下是一些常见的方法:使用Map.Entry和IteratorjavaMap<String,Object>map=newHashMap<>();//添加一些键值对到map中Iterator<Map.Entry<String,Object>>iterator=map.entrySet().iterator();while(iterator.ha......
  • JavaSE笔记10数组入门
    数组的入门概念数组属于引用数据类型,其父类是Object数组可以容纳多个元素。(数组是一个数据的集合)数组可以存储基本和引用数据类型数组是引用类型,所以存储再堆内存中数组不能直接存储Java对象,但是可以存储其引用(内存地址)分类一维数组二维数组多维数组二维数组本质......
  • java 版本企业招标投标管理系统源码+多个行业+tbms+及时准确+全程电子化
    项目说明随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化平台提高招投标工作的公开性......
  • 再探Java为面试赋能(二)Java基础知识(二)反射机制、Lambda表达式、多态
    文章目录前言1.4反射机制1.4.1Class对象的获取1.4.2Class类的方法1.4.3通过反射机制修改只读类的属性1.5Lambda表达式1.5.1函数式接口1.5.2Lambda表达式的使用1.6多态1.6.1多态的概念1.6.2多态的实现条件1.6.3重载(Overload)和重写(Override)前言往期精选......