Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,105 @@ <h3>Compliant solution</h3>
}
String str = bld.toString();
</pre>
<table>
<colgroup>
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
</colgroup>
<thead>
<tr>
<th>Method</th>
<th>size</th>
<th>Runtime</th>
<th>Average time</th>
<th>Error margin</th>
</tr>
</thead>
<tbody>
<tr>
<td><p>plus</p></td>
<td><p>100</p></td>
<td><p>Temurin 21</p></td>
<td><p>4.19 µs/op</p></td>
<td><p>±0.34 µs/op</p></td>
</tr>
<tr>
<td><p>plus</p></td>
<td><p>1000</p></td>
<td><p>Temurin 21</p></td>
<td><p>377.08 µs/op</p></td>
<td><p>±17.36 µs/op</p></td>
</tr>
<tr>
<td><p>plus</p></td>
<td><p>10000</p></td>
<td><p>Temurin 21</p></td>
<td><p>40221.49 µs/op</p></td>
<td><p>±1342.76 µs/op</p></td>
</tr>
<tr>
<td><p>plus</p></td>
<td><p>100000</p></td>
<td><p>Temurin 21</p></td>
<td><p>5286840.53 µs/op</p></td>
<td><p>±185796.75 µs/op</p></td>
</tr>
<tr>
<td><p>stringBuilder</p></td>
<td><p>100</p></td>
<td><p>Temurin 21</p></td>
<td><p>0.97 µs/op</p></td>
<td><p>±0.03 µs/op</p></td>
</tr>
<tr>
<td><p>stringBuilder</p></td>
<td><p>1000</p></td>
<td><p>Temurin 21</p></td>
<td><p>10.25 µs/op</p></td>
<td><p>±1.64 µs/op</p></td>
</tr>
<tr>
<td><p>stringBuilder</p></td>
<td><p>10000</p></td>
<td><p>Temurin 21</p></td>
<td><p>93.27 µs/op</p></td>
<td><p>±16.05 µs/op</p></td>
</tr>
<tr>
<td><p>stringBuilder</p></td>
<td><p>100000</p></td>
<td><p>Temurin 21</p></td>
<td><p>1019.91 µs/op</p></td>
<td><p>±69.58 µs/op</p></td>
</tr>
</tbody>
</table>
<p><strong>Benchmarking code</strong></p>
<p>The results were generated by running the following snippet with <a href="https://github.com/openjdk/jmh">JMH</a>.</p>
<pre>
@Param({"100", "1000", "10000", "100000"})
int size;
private String word = "append";

@Benchmark
public String plus() {
String str = "";
for (int i = 0; i &lt; size; i++) {
str = str + word;
}
return str;
}

@Benchmark
public String stringBuilder() {
StringBuilder builder = new StringBuilder();
for (int i = 0; i &lt; size; i++) {
builder.append(word);
}
return builder.toString();
}
</pre>

Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,109 @@ <h3>Compliant solution</h3>
}
}
</pre>
<h3>Benchmarks</h3>
<table>
<colgroup>
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
</colgroup>
<thead>
<tr>
<th>Method</th>
<th>size</th>
<th>Runtime</th>
<th>Average time</th>
<th>Error margin</th>
</tr>
</thead>
<tbody>
<tr>
<td><p>usingEntrySet</p></td>
<td><p>10</p></td>
<td><p>Temurin 21</p></td>
<td><p>27.48 ns/op</p></td>
<td><p>±6.22 ns/op</p></td>
</tr>
<tr>
<td><p>usingEntrySet</p></td>
<td><p>1000</p></td>
<td><p>Temurin 21</p></td>
<td><p>2480.26 ns/op</p></td>
<td><p>±899.05 ns/op</p></td>
</tr>
<tr>
<td><p>usingEntrySet</p></td>
<td><p>10000</p></td>
<td><p>Temurin 21</p></td>
<td><p>22745.78 ns/op</p></td>
<td><p>±10505.46 ns/op</p></td>
</tr>
<tr>
<td><p>usingKeySet</p></td>
<td><p>10</p></td>
<td><p>Temurin 21</p></td>
<td><p>49.70 ns/op</p></td>
<td><p>±3.78 ns/op</p></td>
</tr>
<tr>
<td><p>usingKeySet</p></td>
<td><p>1000</p></td>
<td><p>Temurin 21</p></td>
<td><p>5061.54 ns/op</p></td>
<td><p>±2056.60 ns/op</p></td>
</tr>
<tr>
<td><p>usingKeySet</p></td>
<td><p>10000</p></td>
<td><p>Temurin 21</p></td>
<td><p>46689.04 ns/op</p></td>
<td><p>±14509.97 ns/op</p></td>
</tr>
</tbody>
</table>
<p><strong>Benchmarking code</strong></p>
<p>The results were generated by running the following snippet with <a href="https://github.com/openjdk/jmh">JMH</a>.</p>
<pre>
@BenchmarkMode({Mode.AverageTime})
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Benchmark)
public class S2864 {
@Param({"10", "1000", "10000"})
int size;

Map&lt;Integer,Integer&gt; map;

@Setup(Level.Trial)
public void setup() {
Random random = new Random();
map = new HashMap&lt;&gt;();
for (int i = 0; i &lt; 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&lt;Integer, Integer&gt; entry : map.entrySet()) {
sumKeysValues += entry.getKey() + entry.getValue();
}
return sumKeysValues;
}
}
</pre>
<h2>Resources</h2>
<h3>Documentation</h3>
<ul>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,114 @@ <h3>Compliant solution</h3>
<pre>
str.indexOf(char1, beginIndex) - beginIndex; // index for char1 not found is (-1-beginIndex)
</pre>
<h2>Resources</h2>
<h3>Benchmarks</h3>
<table>
<colgroup>
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: 20%;">
</colgroup>
<thead>
<tr>
<th>Method</th>
<th>stringSize</th>
<th>Runtime</th>
<th>Average time</th>
<th>Error margin</th>
</tr>
</thead>
<tbody>
<tr>
<td><p>indexOfOnly</p></td>
<td><p>10</p></td>
<td><p>Temurin 21</p></td>
<td><p>1.55 ns/op</p></td>
<td><p>±0.12 ns/op</p></td>
</tr>
<tr>
<td><p>indexOfOnly</p></td>
<td><p>100</p></td>
<td><p>Temurin 21</p></td>
<td><p>1.78 ns/op</p></td>
<td><p>±0.05 ns/op</p></td>
</tr>
<tr>
<td><p>indexOfOnly</p></td>
<td><p>1000</p></td>
<td><p>Temurin 21</p></td>
<td><p>1.82 ns/op</p></td>
<td><p>±0.18 ns/op</p></td>
</tr>
<tr>
<td><p>indexOfOnly</p></td>
<td><p>10000</p></td>
<td><p>Temurin 21</p></td>
<td><p>1.77 ns/op</p></td>
<td><p>±0.08 ns/op</p></td>
</tr>
<tr>
<td><p>substringThenIndexOf</p></td>
<td><p>10</p></td>
<td><p>Temurin 21</p></td>
<td><p>4.85 ns/op</p></td>
<td><p>±0.41 ns/op</p></td>
</tr>
<tr>
<td><p>substringThenIndexOf</p></td>
<td><p>100</p></td>
<td><p>Temurin 21</p></td>
<td><p>6.22 ns/op</p></td>
<td><p>±0.40 ns/op</p></td>
</tr>
<tr>
<td><p>substringThenIndexOf</p></td>
<td><p>1000</p></td>
<td><p>Temurin 21</p></td>
<td><p>14.22 ns/op</p></td>
<td><p>±1.66 ns/op</p></td>
</tr>
<tr>
<td><p>substringThenIndexOf</p></td>
<td><p>10000</p></td>
<td><p>Temurin 21</p></td>
<td><p>275.00 ns/op</p></td>
<td><p>±20.49 ns/op</p></td>
</tr>
</tbody>
</table>
<p><strong>Benchmarking code</strong></p>
<p>The results were generated by running the following snippet with <a href="https://github.com/openjdk/jmh">JMH</a>.</p>
<pre>
@BenchmarkMode({Mode.AverageTime})
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Benchmark)
public class S4635 {
@Param({"10", "100", "1000", "10000"})
int stringSize;

String input;

@Setup
public void setup() {
StringBuilder builder = new StringBuilder();
for (int i = 0; i &lt; stringSize; i++) {
builder.append('a');
}
input = builder.toString();
}

@Benchmark
public int substringThenIndexOf() {
return stringSize / 2 + input.substring(stringSize / 2).indexOf('a');
}

@Benchmark
public int indexOfOnly() {
return input.indexOf('a', stringSize / 2);
}
}
</pre>

2 changes: 1 addition & 1 deletion sonarpedia.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"languages": [
"JAVA"
],
"latest-update": "2025-05-28T09:17:51.640344029Z",
"latest-update": "2025-06-23T12:44:09.599349313Z",
"options": {
"no-language-in-filenames": true,
"preserve-filenames": false
Expand Down