diff --git a/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S1643.html b/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S1643.html index c739f4a72df..3e87468afe9 100644 --- a/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S1643.html +++ b/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S1643.html @@ -18,4 +18,105 @@

Compliant solution

} String str = bld.toString(); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodsizeRuntimeAverage timeError margin

plus

100

Temurin 21

4.19 µs/op

±0.34 µs/op

plus

1000

Temurin 21

377.08 µs/op

±17.36 µs/op

plus

10000

Temurin 21

40221.49 µs/op

±1342.76 µs/op

plus

100000

Temurin 21

5286840.53 µs/op

±185796.75 µs/op

stringBuilder

100

Temurin 21

0.97 µs/op

±0.03 µs/op

stringBuilder

1000

Temurin 21

10.25 µs/op

±1.64 µs/op

stringBuilder

10000

Temurin 21

93.27 µs/op

±16.05 µs/op

stringBuilder

100000

Temurin 21

1019.91 µs/op

±69.58 µs/op

+

Benchmarking code

+

The results were generated by running the following snippet with JMH.

+
+@Param({"100", "1000", "10000", "100000"})
+int size;
+private String word = "append";
+
+@Benchmark
+public String plus() {
+  String str = "";
+  for (int i = 0; i < size; i++) {
+    str = str + word;
+  }
+  return str;
+}
+
+@Benchmark
+public String stringBuilder() {
+  StringBuilder builder = new StringBuilder();
+  for (int i = 0; i < size; i++) {
+    builder.append(word);
+  }
+  return builder.toString();
+}
+
diff --git a/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S2864.html b/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S2864.html index 1d4122f7a5a..2b1c8749943 100644 --- a/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S2864.html +++ b/sonar-java-plugin/src/main/resources/org/sonar/l10n/java/rules/java/S2864.html @@ -24,6 +24,109 @@

Compliant solution

} } +

Benchmarks

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MethodsizeRuntimeAverage timeError margin

usingEntrySet

10

Temurin 21

27.48 ns/op

±6.22 ns/op

usingEntrySet

1000

Temurin 21

2480.26 ns/op

±899.05 ns/op

usingEntrySet

10000

Temurin 21

22745.78 ns/op

±10505.46 ns/op

usingKeySet

10

Temurin 21

49.70 ns/op

±3.78 ns/op

usingKeySet

1000

Temurin 21

5061.54 ns/op

±2056.60 ns/op

usingKeySet

10000

Temurin 21

46689.04 ns/op

±14509.97 ns/op

+

Benchmarking code

+

The results were generated by running the following snippet with JMH.

+
+@BenchmarkMode({Mode.AverageTime})
+@OutputTimeUnit(TimeUnit.NANOSECONDS)
+@State(Scope.Benchmark)
+public class S2864 {
+  @Param({"10", "1000", "10000"})
+  int size;
+
+  Map<Integer,Integer> map;
+
+  @Setup(Level.Trial)
+  public void setup() {
+    Random random = new Random();
+    map = new HashMap<>();
+    for (int i = 0; i < size; i++) {
+      map.put(i, random.nextInt());
+    }
+  }
+
+  @Benchmark
+  public int usingKeySet() {
+    int sumKeysValues = 0;
+    for (Integer key : map.keySet()) {
+      sumKeysValues += key + map.get(key);
+    }
+    return sumKeysValues;
+  }
+
+  @Benchmark
+  public int usingEntrySet() {
+    int sumKeysValues = 0;
+    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
+      sumKeysValues += entry.getKey() + entry.getValue();
+    }
+    return sumKeysValues;
+  }
+}
+

Resources

Documentation