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

为什么char[]是阵列不支持的唯一阵列。流()?

高慈
2023-03-14

在研究将基元数组转换为流的方法时,我发现不支持char[],而支持其他基元数组类型。有什么特别的理由把他们排除在外吗?

共有3个答案

艾灿
2023-03-14

不支持的不仅仅是char数组。

只有3种类型的基元流-IntStreamLongStreamDoubleStream

因此,数组具有将int[]long[]double[]转换为相应基元流的方法

对于boolean[]byte[]short[]char[]float[],没有相应的方法,因为这些基元类型没有相应的基元流。

莫誉
2023-03-14

正如埃兰所说,这不是唯一失踪的。

BooleanStream将是无用的,bytesttream(如果存在)可以作为InputStream处理或转换为IntStream(也可以是short),而float可以作为双流处理。

由于char无论如何都不能表示所有字符(请参见链接),因此它有点像传统流。尽管大多数人都不需要处理代码点,所以这看起来很奇怪。我的意思是你使用字符串。charAt()没有想到“这并不是在所有情况下都有效”。

所以有些事情被忽略了,因为它们被认为没有那么重要。正如JB Nizet在相关问题中所说:

设计者明确地选择通过将原始流限制为3种类型来避免类和方法的爆炸,因为其他类型(char、短期、浮点)可以用它们更大的等价物(int、两倍)来表示,而没有任何显著的性能损失。

BooleanStream将是无用的原因,是因为您只有2个值,这限制了操作很多。没有数学运算要做,你多久处理一次大量布尔值?

从注释中可以看出,不需要BooleanStream。如果是这样,将会有很多实际的用例而不是理论上的情况,一个可以追溯到Java1.4的用例,以及一个与循环的错误比较。

孙京
2023-03-14

当然,答案是“因为这是设计师的决定”。没有技术上的原因可以解释为什么CharStream不能存在。

如果您想要证明,通常需要打开OpenJDK邮件列表*。JDK的文档不习惯于证明什么都是为什么。

有人问了

使用IntStream来表示char/byte流有点不方便。我们应该添加CharStream和ByteStream吗?

Brian Goetz(Java语言架构师)的回答是

简短回答:没有。

对于这些几乎从未使用过的表单来说,每种表单再占用10万JDK内存是不值得的。如果我们加上这些,有人会要求short、float或boolean。

换句话说,如果人们坚持我们拥有所有的原始专业,我们就不会有原始专业。这将比现状更糟糕。

来源

他在其他地方也这么说

如果你想把它们作为字符处理,你可以很容易地把它们向下转换为字符。似乎不是一个足够重要的用例来拥有一整套其他的流。(与短,字节,浮动相同)。

来源

TL;医生:不值得维修费。

*如果你好奇,我用的谷歌查询是

site:http://mail.openjdk.java.net/ charstream
 类似资料:
  • 为了简单起见,我将column称为col。为什么矩阵是[行,列]而不是[列,行]?这给我带来了很多头痛和困惑。 我的思路是这样的:1.一个正则数组, 就像一个矩阵,有一行和多列。它的符号是这样的:啊,如果我们有另一个维度, 现在有行了。因此,让我们在'n',arr[n,rows]之后记下这些行,但现实告诉我们,情况并非如此。 对不起,如果我混淆了你,对不起我的无知。

  • 问题内容: 我想知道从ArrayList转换为Array是否安全/建议?我有一个文本文件,每行一个字符串: 我想将它们读入数组列表,然后将其转换为数组。建议这样做/合法吗? 谢谢 问题答案: 是的,将转换为是安全的。一个好主意取决于您的预期用途。您需要提供的操作吗?如果是这样,请将其保留为。否则转换掉! 输出

  • 所以,我正在尝试匹配 2 个不同的数组。如果相同的单元格匹配,我想使用 .slice 方法从一个数组中删除该单元格。 编辑:我想做的是从数组1中移除一个数字,如果数组2包含一个匹配的数字。代码现在的工作方式是只删除1个条目。我要删除第一个数组中的所有条目。 我尝试运行这个,在控制台日志下,array1没有变化。似乎拼接方法没有删除任何单元格。我搜索了SE,但没有找到任何可以帮助我的东西。

  • 这是一个使用ValArray的简单c程序: 如果我像这样编译并运行它: 产出如预期: 但是,如果我像这样编译和运行它: 输出为: 如果使用优化参数,也会发生同样的情况。 GCC版本是(Archlinux最新版本): 但是,如果我尝试叮当,两者 和 产生相同的正确结果: clang版本是: 我还尝试了在Debian上使用GCC 4.9.2,其中可执行文件会产生正确的结果。 这是GCC中可能存在的错误

  • 这个问题在微软的采访中被问到过。非常好奇为什么这些人会问这么奇怪的概率问题? 给定一个兰特(N),一个随机生成器,它生成从0到N-1的随机数。 编辑:请注意,种子不是固定的。 数组A保持不变的概率是多少? 假设数组包含唯一元素。

  • 我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。 测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]