【发布时间】:2015-09-26 23:45:00
【问题描述】:
我想尽快创建我的HashMap<String, String> m 的键值对字符串。
我试过了:
StringBuffer buf = new StringBuffer();
buf.append("[");
for (String key : m.keySet()) {
buf.append(key);
buf.append("=");
buf.append(m.get(key));
buf.append(";");
}
buf.append("]");
我尝试过使用 Java8:
m.entrySet().stream()
.map(entry -> entry.getKey() + " = " + entry.getValue())
.collect(Collectors.joining("; " , "[" , "]"));
有没有更快、更好的代码来做到这一点? 在 map 函数中附加键和值似乎很昂贵,不是吗?
【问题讨论】:
-
当您分析这两种方法时,哪一种运行速度比另一种快?快多少?
-
我不会担心这种情况下的性能除非它是系统的关键部分,并且通过使用分析器或类似工具被指出为瓶颈。如果您之前没有这样做过并且您认为此代码不是最佳的,那么 I̶ ̶k̶n̶o̶w̶̶t̶h̶a̶t̶ 也许您错了,应该先测试一下。
-
FWIW -
m.toString()的结果可能对你来说已经足够接近了,这无关紧要。 -
你试过使用parallelStream吗?
-
请注意,在 JDK 9
StringJoiner(这是Collectors.joining的底层类)中进行了优化,因此流实现将比在 JDK 8 中快 20-25%(尽管仍然没有天真烂漫)。
标签: java hashmap java-8 java-stream