Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中获得数组、集合或字符串的大小?_Java_Arrays_String_Collections - Fatal编程技术网

如何在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
vs
arrays
,解释它们不一样(或者指向另一个Q/a,这里有详细的解释).可惜它不能处理
CharSequence
s。