Java里集合size和length有什么区别_Java集合与数组差异说明

size()是集合方法,length是数组属性,length()是字符串方法;集合用size(),数组用length,字符串用length(),三者不可互换。

size() 是集合的方法,length 是数组的属性

Java 中 size() 只能用在集合类上,比如 ListSetMap 等,它返回当前集合中实际包含的元素个数。这个值是动态的,随增删操作实时变化。

length 不是方法,而是数组的公共属性,只能用于数组类型(如 int[]String[])。它表示数组在创建时分配的固定容量,哪怕所有元素都是 null 或默认值,length 也不变。

字符串用 length(),不是

length 也不是 size()

字符串对象(String)既没有 length 属性,也不能调用 size()。它提供的是 length() 这个实例方法,用来获取字符串中 Unicode 字符的数量(包括空格、换行符等)。

  • "abc".length() → 返回 3
  • "".length() → 返回 0
  • "a\uFEFFb".length() → 返回 3(含一个零宽非断空格)

集合不能用 length,数组不能用 size()

直接写 list.lengtharr.size() 都会编译报错。因为:

  • 数组是 Java 的原生类型,不继承自任何类,没有 size() 方法
  • 集合是引用类型,属于 java.util 包,没有 length 属性
  • Map 虽然不属于 Collection 接口,但同样支持 size(),表示键值对数量

常见误用与检查建议

写代码时容易混淆三者,尤其在类型转换或泛型推导场景下。可按以下方式快速确认:

  • 看到方括号声明(new int[5]String[] a = {...})→ 用 .length
  • 看到 String 变量 → 用 .length()
  • 看到 ArrayListHashSetHashMap 等 → 用 .size()
  • IDE 报红提示 “cannot resolve symbol” 时,先看变量声明类型,再匹配对应语法