Java里size方法和length有什么区别_Java集合与数组对比说明

发布时间 - 2026-01-07 00:00:00    点击率:
调用 list.length 会报错,因为 List 是对象,没有 length 属性;数组才有 length 字段,而 List 使用 size() 方法获取元素个数,二者类型不同、不可互换。

size() 是集合的方法,length 是数组的属性,二者不能混用——写错会直接编译失败。

为什么调用 list.length 会报错?

因为 List(如 ArrayList)是对象,没有 length 这个属性;而数组(如 String[])是 Java 的原生类型,length 是其唯一公开的、只读的字段。

  • String[] arr = {"a", "b"}; → 正确:arr.length(返回 2
  • List list = Arrays.asList("a", "b"); → 错误:list.length(编译报错:cannot find symbol)
  • 正确写法只有:list.size()

size()length() 容易混淆?

是的,但它们根本不在同一维度:length()String 类的方法,和集合无关;size() 是所有 Collection 接口实现类(ArrayListHashSetLinkedList 等)都必须提供的方法;Map(如 HashMap)也提供 size(),表示键值对数量。

  • "hello".length() → 返回 5(字符串字符数)
  • new ArrayList().size() → 返回 0(当前元素个数)
  • new HashMap().size() → 返回 0(当前 key-value 对数)

底层其实都靠数组?那 size() 性能如何?

大多数集合(如 ArrayList)内部确实用数组存储,size() 方法只是返回一个维护好的计数器字段(如 ArrayList 中的 size 成员变量),不是遍历计算,所以是 O(1) 时间复杂度——和访问数组 length 一样快。

  • 别担心性能,放心调用 size()
  • 但注意:size() 返回的是“当前元素个数”,不是容量(capacity)。比如 new ArrayList(100) 刚创建时 size()0,而内部数组长度可能是 10100(取决于实现)
  • 数组的 length 永远等于其分配的总槽位数,不管里面是不是 null
String[] arr = new String[5];
System.out.println(arr.length); // 输出 5 —— 即使全是 null

List list = new ArrayList<>();
list.add("x");
System.out.println(list.size()); // 输出 1 —— 只算已添加的元素

最常被忽略的一点:泛型擦除后,list.size() 仍是安全的运行时调用;而 arr.length 是编译期就确定的固定值——前者反映逻辑大小,后者反映物理空间。别用 size() 去判断数组,也别用 length 去查集合,Java 不会帮你自动转换。


# java  # 区别  # 键值对  # 为什么 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  Laravel如何创建自定义Facades?(详细步骤)  如何快速搭建自助建站会员专属系统?  javascript基本数据类型及类型检测常用方法小结  如何用花生壳三步快速搭建专属网站?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  微信小程序 input输入框控件详解及实例(多种示例)  如何快速搭建高效可靠的建站解决方案?  Android利用动画实现背景逐渐变暗  高性价比服务器租赁——企业级配置与24小时运维服务  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Android使用GridView实现日历的简单功能  微信小程序 五星评分(包括半颗星评分)实例代码  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  如何在阿里云虚拟服务器快速搭建网站?  个人摄影网站制作流程,摄影爱好者都去什么网站?  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  html如何与html链接_实现多个HTML页面互相链接【互相】  Linux网络带宽限制_tc配置实践解析【教程】  如何快速生成专业多端适配建站电话?  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  Laravel集合Collection怎么用_Laravel集合常用函数详解  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Python进程池调度策略_任务分发说明【指导】  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  如何为不同团队 ID 动态生成多个非值班状态按钮  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  在线制作视频网站免费,都有哪些好的动漫网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Laravel如何使用Eloquent进行子查询  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  详解jQuery中基本的动画方法  大型企业网站制作流程,做网站需要注册公司吗?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  教你用AI润色文章,让你的文字表达更专业  Laravel怎么在Controller之外的地方验证数据  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  如何快速搭建安全的FTP站点?  如何快速建站并高效导出源代码?  Laravel如何升级到最新版本?(升级指南和步骤)