Re: char addition
In article <h3b518$h38$1@inews.gazeta.pl>,
Piotr Kobzda <pikob@gazeta.pl> wrote:
Dominic wrote:
thank you all very much, that was a great help and I decided to do
this:
public static String makeString(char... word) {
StringBuilder work = new StringBuilder(word.length);
for (char chr : word){
work.append(chr);
}
return work.toString().trim();
}
Use of StringBuilder is pointless here. The same effect you may
achieve with:
public static String makeString(char... word) {
return String.valueOf(word).trim();
}
If makeString() were to be called frequently or with large arrays, the
latter is also appreciably faster:
<console>
Warmup: 8.458 ms.
Size: 10
Builder: 6.383 ms.
ValueOf: 2.269 ms.
Size: 20
Builder: 7.861 ms.
ValueOf: 1.712 ms.
Size: 30
Builder: 9.517 ms.
ValueOf: 1.729 ms.
Size: 40
Builder: 12.208 ms.
ValueOf: 2.113 ms.
Size: 50
Builder: 14.675 ms.
ValueOf: 2.45 ms.
</console>
<code>
import java.util.Random;
/** @author JBM*/
public class MakeStringTest {
private static final Random random = new Random();
public static void main(String[] args) {
(new Warmup()).test(testArray(10));
System.out.println();
for (int i = 1; i < 6; i++) {
int size = i * 10;
System.out.println("Size: " + size);
char[] a = testArray(size);
(new Builder()).test(a);
(new ValueOf()).test(a);
System.out.println();
}
}
private static char[] testArray(int count) {
char[] chars = new char[count];
for (int i = 0; i < count; i++) {
chars[i] = (char) (random.nextInt(95) + ' ');
}
return chars;
}
}
abstract class MSTest {
public static final int COUNT = 20000;
public void test(char[] word) {
long start = System.nanoTime();
for (int i = 0; i < COUNT; i++) {
makeString(word);
}
System.out.println(name()
+ ((float)(System.nanoTime() - start) / 1000000)
+ " ms.");
}
public abstract String makeString(char[] in);
public abstract String name();
}
class Warmup extends MSTest {
public String makeString(char[] word) {
StringBuilder work = new StringBuilder(word.length);
for (char chr : word) {
work.append(chr);
}
return String.valueOf(word);
}
public String name() {
return "Warmup: ";
}
}
class Builder extends MSTest {
public String makeString(char[] word) {
StringBuilder work = new StringBuilder(word.length);
for (char chr : word) {
work.append(chr);
}
return work.toString().trim();
}
public String name() {
return "Builder: ";
}
}
class ValueOf extends MSTest {
public String makeString(char[] word) {
return String.valueOf(word).trim();
}
public String name() {
return "ValueOf: ";
}
}
</code>
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>