- 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/
编辑:我似乎问错了这个问题。 我正在尝试寻找一种方法来查询一个集合是否在另一个集合中可用。例如: SELECT * FROM something WHERE (1, 3) IN (1, 2, 3, 4
这两种方法似乎 produce the same results ,但我一直很难真正说服人们第二种方法有效,因为它显然并不为人所知。 // Create some data var foo = { '
我一直在学习Kotlin,并且遇到过Collections API。在Kotlin之前,我一直在学习Java,并且我知道Java中有很多不同类型的Collections API。例如,我们使用List
为什么我会得到不同的行为: Collection col2 = new ArrayList(col); 集合 col2 = new ArrayList(); col2.addAll(col) 我正在与
所以我有一个代表专辑信息的 JSON 对象。给定“function updateRecords(id, prop, value)”我希望能够更新每个条目。正确的完成代码如下。 我得到了指示,粗体部分,
我想存储一个对象集合,这些对象根据它们所代表的值进行键控。这些键可以重复。例如: [4] => Bob [5] => Mary [5] => Sue [9] => Steve [10] =>
在检查 ArrayList API 时,我注意到一些看起来很奇怪的东西。 确实,这里是 ArrayList 构造函数实现,其中 Collection 作为参数传递: public ArrayList(
我正在为 API 编写一个 swagger 定义文件。 API 是用于 GET 请求的 /path/to/my/api: get: summary: My Custom API d
我知道scala.collection包中有两个非常有用的对象,可以帮助我们实现这个目标: JavaConverters(如果我想明确说明并准确说明我要转换的内容) JavaConversions(如
我已经阅读了无数其他帖子,但似乎无法弄清楚发生了什么,所以是时候寻求帮助了。 我正在尝试将包含集合的域实体映射到也包含集合的 dtos。 这是一个原始示例; (我提前为代码墙道歉,我尽量保持简短):
我正在创建一个具有 ArrayList 的类,因此当我调用构造函数时,它会初始化该数组: public class ElementsList { private ArrayList list;
我正在阅读事件指南和指南的开头,它说: You can also add an event listener to any element in the this.$ collection using
我是 Python 新手,想知道如何使用键在字典中存储不同数据类型的列表 例如 - {[Key1,int1,int1,String1] , [Key2,int2,int2,String2], [Key
int[] mylist = { 2, 4, 5 }; IEnumerable list1 = mylist; list1.ToList().Add(1); // why 1 does not get
我在 UI 表单中的每一行之后将以下内容添加到 HashMap 集合中 声明 Map> map = new HashMap>(); List valSetOne = new ArrayList();
我正在开发我的第一个 Java 项目,我有一个问题。问题应该很简单(虽然代码不是那么短,但没有理由被吓倒:))。我创建了一个基本的角色扮演游戏,并且有一个定义每个角色的抽象类“Character”。在
我正在开发一款应用程序,可以为用户收集推文、Facebook 状态和 Facebook 照片。目前,用户确切地设定了他们希望这种收获发生的时间和时间,并且蜘蛛会在此期间拉取数据。 when 和 to
有谁知道在 C# 中是否有与 Java 的 Set 集合等效的好方法?我知道您可以通过填充但忽略值来使用 Dictionary 或 HashTable 在某种程度上模仿集合,但这不是一种非常优雅的方式
EXISTS 该函数返回 集合中第一个元素的索引,如果集合为空,返回NULLNULLNULL Collecti
RDF集合是通过属性 rdf:parseType="Collection" 来描述仅包含指定成员的组 rdf:parseType="Collection" 属
我是一名优秀的程序员,十分优秀!