- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
假设我有这个代码:
String[] left = { "1", "2" };
String[] leftNew = Collections.emptyList().toArray(left);
System.out.println(Arrays.toString(leftNew));
[null, 2]
.这种是有道理的,因为我们有一个空列表,它以某种方式假设处理我们正在传递一个更大的数组并将第一个元素设置为 null 的事实。这大概是说空列表中不存在第一个元素,因此设置为
null
.
String[] right = { "nonA", "b", "c" };
// or Collections.singletonList("a");
// or a plain List or Set; does not matter
String[] rightNew = Collections.singleton("a").toArray(right);
System.out.println(Arrays.toString(rightNew));
["a", "b", "c"]
[a, null, c]
If this set fits in the specified array with room to spare (i.e., the array has more elements than this set), the element in the array immediately following the end of the set is set to null.
This is useful in determining the length of this set only if the caller knows that this set does not contain any null elements.
String[] middle = { "nonZ", "y", "u", "m" };
List<String> list = new ArrayList<>();
list.add("z");
list.add(null);
list.add("z1");
System.out.println(list.size()); // 3
String[] middleNew = list.toArray(middle);
System.out.println(Arrays.toString(middleNew));
[z, null, z1, null]
最佳答案
<T> T[] toArray(T[] a)
Collection 上的方法很奇怪,因为它试图同时实现两个目的。
首先我们来看toArray()
.这从集合中获取元素并在 Object[]
中返回它们。 .即返回数组的组件类型总是Object
.这很有用,但它不能满足其他几个用例:
1) 如果可能,调用者想要重用现有的数组;和
2)调用者想要指定返回数组的组件类型。
处理案例 (1) 原来是一个相当微妙的 API 问题。调用者想要重用一个数组,所以显然需要传入它。与 no-arg toArray()
不同。方法,它返回一个合适大小的数组,如果调用者的数组被重用,我们需要一种方法来返回复制的元素数量。好的,让我们有一个看起来像这样的 API:
int toArray(T[] a)
void copyInto(Object[] anArray)
IndexOutOfBoundsException
如果目标数组太短。由于 Vector 是一个并发集合,在调用之前大小可能随时发生变化,因此调用者无法保证目标数组有足够的大小,也无法知道复制的元素数量。调用者唯一能做的就是在整个序列周围锁定 Vector:
synchronized (vec) {
Object[] a = new Object[vec.size()];
vec.copyInto(a);
}
Collections.toArray(T[])
如果目标数组太小,API 会通过不同的行为来避免这个问题。它不会像 Vector.copyInto() 那样抛出异常,而是分配一个大小合适的新数组。这将牺牲阵列重用情况以获得更可靠的操作。现在的问题是调用者无法判断它的数组是被重用还是分配了一个新数组。因此,返回值
toArray(T[])
需要返回一个数组:参数数组,如果它足够大,或者新分配的数组。
null
将复制的元素数量传达给调用者。到从集合中复制的最后一个元素之后的数组位置。如果知道源集合没有空值,这将使调用者能够确定复制的元素数。调用后,调用者可以搜索数组中的第一个空值。如果有,它的位置决定了复制的元素数量。如果数组中没有空值,则知道复制的元素数等于数组的长度。
MyType[] a = coll.toArray(new MyType[0]);
toArray(new MyType[coll.size()])
实际上更慢。这是因为需要初始化数组为空值,然后用集合的内容填充它。请参阅 Alexey Shipilev 关于此主题的文章,
Arrays of Wisdom of the Ancients。)
MyType[] a = coll.toArray(MyType[]::new);
关于java - 集合 emptyList/singleton/singletonList/List/Set toArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51902362/
我想使用 R 预定义这样的列表 DATA<-list( list(list(),list(),list()), list(list(),list(),list()), list(list(),l
如何将一个列表添加到另一个列表,返回一个列表的列表? foo :: [a] -> [a] -> [[a]] 例如,我想要的结果是: foo [1,2] [3,4] 将是 [[1,2], [3,4]]。
我还没有在这里找到类似问题的解决方案,所以我会寻求你的帮助。 有 2 个列表,其中之一是列表列表: categories = ['APPLE', 'ORANGE', 'BANANA'] test_re
这个问题不同于Converting list of lists / nested lists to list of lists without nesting (这会产生一组非常具体的响应,但无法解决
原始列表转换为 List正好。为什么原始列表的列表不能转换为 List 的列表? { // works List raw = null; List wild = raw; } {
在下面的代码中,get()被调用并将其结果分配给类型为 List> 的变量. get()返回 List>并在类型参数为 T 的实例上调用设置为 ? ,所以它应该适合。 import java.util
原始列表转换为 List正好。为什么原始列表的列表不能转换为 List 的列表? { // works List raw = null; List wild = raw; } {
在insufficiently-polymorphic 作者说: def foo[A](fst: List[A], snd: List[A]): List[A] There are fewer way
我有下面的代码有效。 class ListManipulate(val list: List, val blockCount: Int) { val result: MutableList>
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
在 scala (2.9) 中转换列表列表的最佳方法是什么? 我有一个 list : List[List[A]] 我想转换成 List[A] 如何递归地实现这一点?或者还有其他更好的办法吗? 最佳答案
我编写了这个函数来确定给定元素是否存储在元组列表的列表中,但目前它只搜索第一个列表。我将如何搜索其余列表? fun findItem (name : command, ((x,y)::firstlis
我创建了一个类名 objectA,它有 4 个变量:约会时间;字符串文本;变量 1,变量 2 我需要创建一个 ObjectA() 列表。然后首先按时间对它们进行分组,其次按 var1,然后按 var2
我有一套说法 char={'J','A'} 和列表的列表 content = [[1,'J', 2], [2, 'K', 3], [2, 'A', 3], [3,'A', 9], [5, 'J', 9
我有以下列表 List >>> titles = new ArrayList >>> ();我想访问它的元素,但我不知道该怎么做.. 该列表有 1 个元素,它又包含 3 个元素,这 3 个元素中的
转换 List[List[Long]] 的最佳方法是什么?到 List[List[Int]]在斯卡拉? 例如,给定以下类型列表 List[List[Long]] val l: List[List[Lo
我有一个来自 Filereader (String) 的 List-List,如何将其转换为 List-List (Double):我必须返回一个包含 line-Array 的第一个 Values 的
我收集了List> 。我需要将其转换为List> 。这是我尝试过的, List> dataOne = GetDataOne(); var dataTwo = dataOne.Select(x => x
这个问题在这里已经有了答案: Cannot convert from List to List> (3 个答案) 关闭 7 年前。 我没有得到这段代码以任何方式编译: List a = new Ar
这个问题在这里已经有了答案: Cannot convert from List to List> (3 个答案) 关闭 7 年前。 我没有得到这段代码以任何方式编译: List a = new Ar
我是一名优秀的程序员,十分优秀!