如何在Java中获得数组、集合或字符串的大小?
访问数组、集合(如何在Java中获得数组、集合或字符串的大小?,java,arrays,string,collections,Java,Arrays,String,Collections,访问数组、集合(List、Set等)和String对象的长度有哪些不同的方法?为什么不同?节选: 对于数组:使用.length 对于集合(或映射):使用.size() 对于CharSequence(包括CharBuffer,段,字符串,StringBuffer,和StringBuilder):使用.length() 阵列 可以使用数组上的.length属性来访问它。尽管数组是动态创建的对象,但长度属性的授权由以下内容定义: 数组是由数组创建表达式或 数组初始值设定项 数组创建表达式指定元素类型
List
、Set
等)和String
对象的长度有哪些不同的方法?为什么不同?节选:
对于数组:使用.length
对于集合
(或映射
):使用.size()
对于CharSequence
(包括CharBuffer
,段
,字符串
,StringBuffer
,和StringBuilder
):使用.length()
阵列
可以使用数组上的.length
属性来访问它。尽管数组是动态创建的对象
,但长度
属性的授权由以下内容定义:
数组是由数组创建表达式或
数组初始值设定项
数组创建表达式指定元素类型、元素数目
嵌套数组的级别,以及至少一个
筑巢的层次数组的长度可作为最终值使用
实例变量长度
数组初始值设定项创建数组并为
它的所有组成部分
由于数组的长度在不创建新数组实例的情况下无法更改,因此重复访问.length
将不会更改值,无论对数组实例执行了什么操作(除非其引用替换为大小不同的数组)
例如,要获得声明的一维数组的长度,可以这样写:
double[] testScores = new double[] {100.0, 97.3, 88.3, 79.9};
System.out.println(testScores.length); // prints 4
要获得n维数组中的长度,需要记住它们一次访问数组的一维
下面是一个二维数组的示例
int[][] matrix
= new int[][] {
{1, 2, 3, 4},
{-1, 2, -3, 4},
{1, -2, 3, -4}
};
System.out.println(matrix.length); // prints 3 (row length or the length of the array that holds the other arrays)
System.out.println(matrix[0].length); // prints 4 (column length or the length of the array at the index 0)
这一点非常重要,尤其是在以下情况下:;列或行不一定总是对齐的
集合(集合
,列表
等)
对于实现集合
接口的每个对象,它们都将调用一个方法,用于访问集合的总体大小
与数组不同,集合不是固定长度的,可以随时添加或删除元素。当且仅当列表本身添加了任何内容时,调用size()
将产生非零结果
例如:
List<String> shoppingList = new ArrayList<>();
shoppingList.add("Eggs");
System.out.println(shoppingList.size()); // prints 1
Set<String> uniqueShoppingList = new HashSet<>();
uniqueShoppingList.add("Milk");
System.out.println(uniqueShoppingList.size()); // prints 1
uniqueShoppingList.add("Milk");
System.out.println(uniqueShoppingList.size()); // prints 1
System.out.println("alphabet".length()); // prints 8
访问列表的大小
*的方式与锯齿状数组类似:
List<List<Integer>> oddCollection = new ArrayList<>();
List<Integer> numbers = new ArrayList<Integer>() {{
add(1);
add(2);
add(3);
}};
oddCollection.add(numbers);
System.out.println(oddCollection.size()); // prints 1
System.out.println(oddCollection.get(0).size()); // prints 3
别忘了从中选择CollectionUtils.size()
,它是空值安全的,因此您不必事先进行空值检查
为什么不同
我将尝试回答这一部分,因为其他答案似乎没有涵盖这一部分
CharSequence
(包括String
)上的方法称为.length()
,因为序列具有长度。“长度”是一个用于序列的合理词汇,因为它有一个开始和一个结束,你可以测量它们之间的距离;就像你可以测量棍子两端之间的距离来得到棍子的“长度”
集合
上的方法称为.size()
,因为不是每个集合都是一个有开始和结束的序列。想象一下有两千个不同的收藏;你会说你收藏的“大小”是2000,但你不会说你收藏的“长度”是2000。“大小”这个词对于那些从头到尾都无法测量的事物来说更为自然。有些集合,如ArrayList
确实表示了一个序列,在这个序列中,谈论它们的长度是有意义的,但是该方法仍然被命名为.size()
,因为该方法名称是从集合
接口继承的;为顺序集合添加另一个名为.length()
的方法会很奇怪,该方法的作用与继承的.size()
方法相同
数组是序列,所以它们有长度。然而,数组是该语言的一个低级功能;它们不是可以声明.length()
方法的“array”类的实例,因此.length
不是方法。从语法上看,它看起来像是访问一个字段,但它不是一个字段;获取数组长度的表达式被编译为arraylength
。数组长度的不同字节码指令与数组的不同语法相对应。这在很大程度上是,试图为所有关于访问这三件事的大小的Java特定问题创建一个规范的答案。请问是什么激发了您创建这个问题/答案?@AnkitLamba它看起来对我很有用,但我仍然想知道这个问题/答案的动机。@LuiggiMendoza,还有少数几个只回答少数片段中的一个片段来获得字符串
、集合
或数组的大小。有点像Java需要一个规范的答案来回答一个常见的问题。看起来不错,但是对于初学者来说,更多的信息,你应该添加一个关于ArrayList
vsarrays
,解释它们不一样(或者指向另一个Q/a,这里有详细的解释).可惜它不能处理CharSequence
s。