我正在研究Java-8中引入的新添加的现有功能。新添加到String类的一个简单功能对我来说很有吸引力-即String
Join方法
。
例:
String.join(" ", "AZY","BAX"); // returns AZY BAX
出于好奇,我已经通过编写简单的Java代码检查了此功能的性能(执行时间)
public static void main(String[] args) {
long start = System.nanoTime();
String abc= String.join(" ,"AZY","BAX" … // joining 1000 words of size 3 char;
long diff = System.nanoTime() - start;
System.out.println(" Java 8 String Join " + diff);
start = System.nanoTime();
abc= "AZY"+"BAX"+"CBA"+ … // adding 1000 word of size 3 char;
diff = System.nanoTime() - start;
System.out.println(" Tranditional " + diff);
start = System.nanoTime();
new StringBuilder().append("AZY").append("BAX").appe… // appending 1000 word of size 3 char;
diff = System.nanoTime() - start;
System.out.println(" String Builder Append " + diff);
}
结果对我来说并不那么令人兴奋(以秒为单位的时间)
Java 8 String Join 1340114
Tranditional 59785
String Builder Append 102807
复杂度为o(n)–实际上为(n *单个元素长度的大小)
我没有测量过的其他性能指标(内存等)。
我的问题是:
首先是第一件事。 这不是您的微平台Java方式
阅读如何在Java中编写正确的微基准测试?第一。您的电话号码完全无关紧要,因此请忽略它们。
看第二个例子:
abc= "AZY"+"BAX"+"CBA"+...
在我看来,这些看起来像编译时间常数。这String
将在编译时连接起来,并且没有基准可言。这是无用的比较,因为StringBuilder
or
的全部要点String.join
是将String
不是编译时间常数的s 连接在一起。
继续比较StringBuilder
和String.join
。查看源代码:
public static String join(CharSequence delimiter, CharSequence... elements) {
Objects.requireNonNull(delimiter);
Objects.requireNonNull(elements);
// Number of elements not likely worth Arrays.stream overhead.
StringJoiner joiner = new StringJoiner(delimiter);
for (CharSequence cs: elements) {
joiner.add(cs);
}
return joiner.toString();
}
这使用StringJoiner
。一个StringJoiner
简单地使用StringBuilder
引擎盖下,所以两者是等效的。
通常看 代码 比尝试对性能进行基准测试要有用得多。即使您正确进行基准测试。
还值得注意的是,您的第一种方法使用join
,String
在“”(空格)上加入了1000
s。而您的StringBuilder
方法只是将它们附加在一起。这两个不一样。
该String.join
方法的重点是您可以执行以下操作:
String.join(", ", "a", "b", "c") // result is "a, b, c"
使用a,StringBuilder
您将不得不添加更多代码。
问题内容: 网上有很多关于python性能的文章,这是您首先读到的:不应使用’+’连接字符串:避免使用s1 + s2 + s3,而应使用str.join 我尝试了以下操作:将两个字符串连接为目录路径的一部分:三种方法: 我不应该做的“ +” 连接 os.path.join 这是我的代码: 这里的结果(python 2.5 WinXP) 难道不是正好相反吗? 问题答案: 的确,您不应使用“ +”。您
问题内容: 我经常听到人们说这是最好的做法之一,在记录时避免使用它。 我正在查看代码,以了解他们如何处理此问题,并认为他们正在做类似的事情。 这是方法的代码片段,它采用模式和参数并返回要记录的消息。 我不明白这种实现比使用串联更好。任何对此的见解将非常有帮助。 问题答案: 日志系统中格式字符串的好处是,日志系统可以决定是否必须进行字符串连接。 让我们以这些行为例: 只要此记录器的级别为debug或
Space是一个字符串连接运算符,它合并两个字符串。 以下示例演示了这一点 - 例子 (Example) [jerry]$ awk 'BEGIN { str1 = "Hello, "; str2 = "World"; str3 = str1 str2; print str3 }' 输出 (Output) 执行此代码时,您将获得以下结果 - Hello, World
本文向大家介绍MySql删除和更新操作对性能有影响吗,包括了MySql删除和更新操作对性能有影响吗的使用技巧和注意事项,需要的朋友参考一下 删除和更新操作的开销往往比插入高,所以一个好的设计需要减少对数据库的更新和删除操作。 3.1更新操作 数据库的更新操作会带来一连串的“效应”:更新操作需要记录日志(以便错误时回滚);更新可变长字段(如,varchar类型)会带来数据物理存储的变化(记录的移动)
我试图评估比较两个字符串是否会随着它们的长度增加而变慢。我的计算表明比较字符串应该需要一个摊销常数时间,但我的Python实验产生了奇怪的结果: 下面是字符串长度(1到400)与时间(毫秒)的关系图。自动垃圾收集已禁用,并且gc。在每次迭代之间运行collect。 我每次比较100万随机字符串,计算匹配如下。这个过程重复50次,然后取所有测量时间的最小值。 什么可能解释长度64左右突然增加? 注意
前言 忙活了一个礼拜,终于等到周末,可以空下来写点东西。 之前已经完成《数值运算》和《布尔运算》,这次轮到介绍字符串操作 。咱们先得弄明白两个内容: 什么是字符串? 对字符串有哪些操作? 下面是"在线新华字典"的解释: 字符串:简称“串”。有限字符的序列。数据元素为字符的线性表,是一种数据的逻辑结构。在计算机中可有不同的存储结构。在串上可进行求子串、插入字符、删除字符、置换字符等运算。 而字符呢?