Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.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 为什么在List类中有两个plusArray列表和一个plusArray列表?_Java_Guava - Fatal编程技术网

Java 为什么在List类中有两个plusArray列表和一个plusArray列表?

Java 为什么在List类中有两个plusArray列表和一个plusArray列表?,java,guava,Java,Guava,我只是好奇google guava的List类实现,我们有两种方法从数组创建List Lists.asList(E first, E[] rest) Lists.asList(E first, E second, E[] rest) 为什么这些方法将first和rest分开?它不能像java的Arrays.asList实现那样吗 我唯一能看到的是第一个和第二个可以为null,其余的不可以为null 有人能帮助理解这一点吗?好的,因此Lists.asList()的工作并不是直接将数组转换为列表

我只是好奇google guava的List类实现,我们有两种方法从数组创建List

Lists.asList(E first, E[] rest)
Lists.asList(E first, E second, E[] rest)
为什么这些方法将first和rest分开?它不能像java的Arrays.asList实现那样吗

我唯一能看到的是第一个和第二个可以为null,其余的不可以为null


有人能帮助理解这一点吗?

好的,因此Lists.asList()的工作并不是直接将数组转换为列表

假设我们有一个数组,并且我们想在其中插入一个元素,我们不能这样做,因为数组的大小是固定的。这个问题的一个解决方案是分配一个大小为原始数组+1的新数组,并将所有元素从原始数组复制到新数组。这是可行的,但效率很低

Guava为这个问题提供了一个有效的解决方案–Guava的
Lists.asList()
方法返回一个由原始数组支持的不可修改的列表,该数组也包含指定的元素

资料来源:

因此,基本上,您可以使用它来转换数组,方法是将第一个和/或第二个参数(取决于您使用的方法)指定为null,并将“rest”参数指定为数组

这将以列表的形式返回数组,第一个索引可能为null(第二个索引也是null,具体取决于您使用的是什么)

但是,如果需要,可以使用相同的方法获取一个列表,其中包含附加到数组中的特定数据(第一个和第二个索引值)


希望这是有帮助的

这些方法存在的主要原因是,当您编写一个签名为

void foo(酒吧优先,酒吧休息);
当您希望允许用户调用该方法,就像它是一个只有一个varargs参数的方法一样,但您希望要求至少使用一个或两个参数调用它(而varargs单独允许用户使用零调用它)时,您会这样做。在这种方法的实现中,您可能希望将这些参数视为单个列表<代码>列表。asList不进行任何数组复制即可执行此操作:

void foo(条形优先,条形…剩余){
列表栏=Lists.asList(第一个,其余);
// ...
}

如果我有两个单独的元素和一个剩余元素的数组,我将如何使用Arrays.asList?如果我们没有任何单独的元素,并且只有一个数组,那么除了传递null之外,我没有其他选择。Arrays.asList是list.asList的相反过程如果没有任何单独的元素,那么你就有了一个与这个方法解决的问题不同的问题。我的问题是,如果你有两个单独的元素和一个数组,你会如何列出它们?答案是您可以使用这种方便的方法。通常情况下,库不会解决此类特定情况,如果是这种情况,那么三参数和数组也是有效的情况。请注意,将第一个元素指定为null并不意味着列表将只保存其余的元素。事实上,不管怎样,列表都将包含第一个元素——在本例中为null元素。如果只想从数组创建列表,那么只需使用Arrays.asList。经过一些分析,我认为他们正在尝试在列表中强制至少一个或两个参数,