当前位置: 首页 > 知识库问答 >
问题:

toArray(new String[0])中的new String[0]有什么用;

鄢晔
2023-03-14

为什么在数组中需要参数新字符串[0]?

saved = getSharedPreferences("searches", MODE_PRIVATE);
String[] mystring = saved.getAll().keySet().toArray(new String[0]);

共有3个答案

仲柏
2023-03-14

为了给接受的答案添加更多细节,一些IDE(此处为IntelliJ)给出了有用的评论和解释,说明为什么当使用new String[c.size()]与使用new String[0]作为toArray方法的参数时,它们会在活动检查时发出警告:

有两种样式可以将集合转换为数组:使用预大小的数组(如c.toArray(新字符串[c.size()])或使用空数组(如c.toArray(新字符串[0]))。在较旧的Java版本中,建议使用预大小的数组,因为创建适当大小的数组所需的反射调用相当慢。然而,由于OpenJDK 6的最新更新,这个调用是内部化的,使得空阵列版本的性能与之前的版本相同,有时甚至更好。此外,传递预大小的数组对于并发或同步的集合来说是危险的,因为大小和toArray调用之间可能存在数据竞争,如果在操作过程中同时收缩集合,则可能会导致数组末尾出现额外的null。这种检查允许遵循统一的风格:要么使用空数组(在现代Java中建议使用),要么使用预大小的数组(在较旧的Java版本或非基于热点的JVM中可能更快)。

希望这有助于进一步理解为什么事情是以某种方式进行的。

符修杰
2023-03-14

它为返回提供一个类型,并防止任何编译时歧义。

该方法调用的符号是:<代码>

当一个空参数是Object[]toArray()时

况胡媚
2023-03-14

这样你就可以得到一个字符串[]。没有任何参数的对象返回给您一个对象[]。

请参阅此方法有两个版本:

  • Object[]toArray()
  • <代码>

通过传递字符串[]数组,您使用的是通用版本。

传递字符串[]数组的更好方法是使用集的大小初始化它,而不是使用大小0,这样就不需要在方法中创建新数组:

Set<String> set = saved.getAll().keySet();
String[] mystring = set.toArray(new String[set.size()]);
 类似资料:
  • 问题内容: 假设我有一个ArrayList 我想调用toArray,是否有使用性能的理由 过度 ? 我更喜欢第二种样式,因为它不太冗长,并且我假设编译器将确保不会真正创建空数组,但是我一直在想那是否是真的。 当然,在99%的情况下,它不会以一种方式或其他方式产生任何差异,但我想在我的常规代码和优化的内部循环之间保持一致的样式… 问题答案: 违反直觉的是,在Hotspot 8上最快的版本是: 我已经

  • 问题内容: 请帮助我根据功能上的差异来阐明这两个python语句的概念: 问题答案: 根据文档: 退出状态为n的进程,而无需调用清理处理程序,刷新stdio缓冲区等。 注意 退出的标准方法是。通常只应在。之后的子进程中使用。

  • 本文向大家介绍F# 0元组有什么用?,包括了F# 0元组有什么用?的使用技巧和注意事项,需要的朋友参考一下 示例 2元组或3元组表示一组相关项。(2D空间中的点数,颜色的RGB值等。)1元组不是很有用,因为可以很容易地将其替换为单个1 int。 一个0元组似乎毫无用处,因为它绝对不包含任何东西。但是它具有的特性使其在F#等功能语言中非常有用。例如,0元组类型只有一个值,通常表示为()。所有0元组都

  • 问题内容: 我必须编写一个例程,如果变量的类型为,则将变量的值加1,否则将变量的值分配为0,其中变量的初始值为或。 第一个实现是因为我认为没有数字会使算术表达式为假,但是由于计算为真,所以这是错误的。然后,我得知行为类似于0,并且以下表达式均被评估为true。 当然不是0。被评估为false。这使看似重言式的表达成为错误。 为什么实际上不是0,却像0? 问题答案: 您真正的问题似乎是: 为什么:

  • 问题内容: 为什么在Python中等于?它不应该像那样抛出异常吗? 问题答案: Wikipedia对历史进行了有趣的报道,并对以下内容的价值有不同的看法: 至少从19世纪初期开始,辩论一直在进行。当时,大多数数学家都同意,直到1821年,柯西(Cauchy)以及诸如未定义形式的表格之类的表达式才被列出。在1830年代,利比里(Libri)发表了令人信服的论点,莫比乌斯(Möbius)站在他身边。

  • 问题内容: 在Python 2.6中查看Queue.py时,我发现这个结构有点奇怪: 如果maxsize为0,则队列永远不会满。 我的问题是在这种情况下如何运作?如何0 < 0 == 0被认为是错误的? 问题答案: 我相信Python对关系运算符的序列有特殊的处理方式,以使范围比较易于表达。能说比说好得多。 这些称为链接比较。这是他们文档的链接。 在您谈论的其他情况下,括号会强制在一个关系运算符之