嗨,我想将Characters数组快速复制到chars数组,我可以编写一个方法,通过将数组中的每个Charater转换为char,将Character数组复制到char数组,但是对于两个相同类型的数组,有没有比 Arrays.copyOf 更快的现成方法?
char[] myCharArray = Arrays.stream(myCharacterArray)
.map(ch -> ch.toString())
.collect(Collectors.joining())
.toCharArray();
写得很快。执行速度是否快?除非你有一个非常大的数组或经常进行这种转换,否则你不需要关心。
fozzybear的答案提出了您也可以考虑的相同变体。
Apache Commons Lang 中有一个方法可以完全满足您的需要: http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/ArrayUtils.html#toPrimitive-java.lang.Character:A-
public static char[] ArrayUtils.toPrimitive(Character[] array)
技术上不可能,但你可能会用一种懒惰的方式将字符拆箱为字符。例如使用 Stream。 (目前这甚至可能是额外的开销。)
如果字符数组源自集合、列表,那么您只需在源头采取措施即可。尽管一切都不会很快。但字符数组并不复杂,就像将每枚硬币包裹在自己的纸中一样。
给定一个
Character[]
数组
Character[] asciiChars = Stream.iterate(32, i -> i += 1)
.map(i -> Character.valueOf((char)i.intValue()))
.limit(95)
.toArray(Character[]::new);
与上述示例类似的基于
Stream
的解决方案(节省一个映射步骤)将是:
char[] chars = Stream.of(asciiChars)
.collect(StringBuilder::new, StringBuilder::append, StringBuilder::append)
.toString()
.toCharArray();