/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
int reps = 100000;
Map
<String, String
> map
= null; //warmup
for (int i = 0; i < reps; i++){
map = simple();
}
long start
= System.
currentTimeMillis(); for (int i = 0; i < reps; i++){
map = simple();
}
long stop
= System.
currentTimeMillis(); System.
out.
println(stop
- start
); //warmup
for (int i = 0; i < reps; i++){
map = convoluted();
}
start
= System.
currentTimeMillis(); for (int i = 0; i < reps; i++){
map = convoluted();
}
stop
= System.
currentTimeMillis(); System.
out.
println(stop
- start
);
}
private static Map
<String, String
> convoluted
() { String test
= "pet:cat::car:honda::location:Japan::food:sushi"; boolean stateiskey = true;
Map
<String, String
> map
= new HashMap
<>(); int keystart = 0;
int keyend = 0;
int valuestart = 0;
int valueend = 0;
for(int i = 0; i < test.length(); i++){
char nextchar = test.charAt(i);
if (stateiskey) {
if (nextchar == ':') {
keyend = i;
stateiskey = false;
valuestart = i + 1;
}
} else {
if (i == test.length() - 1 || (nextchar == ':' && test.charAt(i + 1) == ':')) {
valueend = i;
if (i + 1 == test.length()) valueend += 1; //compensate one for the end of the string
String key
= test.
substring(keystart, keyend
); String value
= test.
substring(valuestart, valueend
); keystart = i + 2;
map.put(key, value);
i++;
stateiskey = true;
}
}
}
return map;
}
private static Map
<String, String
> simple
(){ String test
= "pet:cat::car:honda::location:Japan::food:sushi"; String[] test1
= test.
split("::");
map.put(t[0], t[1]);
}
return map;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlpbnQgcmVwcyA9IDEwMDAwMDsKCQlNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG51bGw7CgkJLy93YXJtdXAKCQlmb3IgKGludCBpID0gMDsgaSA8IHJlcHM7IGkrKyl7CgkJCW1hcCA9IHNpbXBsZSgpOwoJCX0KCQlsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCByZXBzOyBpKyspewoJCQltYXAgPSBzaW1wbGUoKTsKCQl9CgkJbG9uZyBzdG9wID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKHN0b3AgLSBzdGFydCk7CgkJLy93YXJtdXAKCQlmb3IgKGludCBpID0gMDsgaSA8IHJlcHM7IGkrKyl7CgkJCW1hcCA9IGNvbnZvbHV0ZWQoKTsKCQl9CgkJc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IHJlcHM7IGkrKyl7CgkJCW1hcCA9IGNvbnZvbHV0ZWQoKTsKCQl9CgkJc3RvcCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwoJCVN5c3RlbS5vdXQucHJpbnRsbihzdG9wIC0gc3RhcnQpOwoKCQlTeXN0ZW0ub3V0LnByaW50bG4obWFwKTsKCX0KCQoJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBjb252b2x1dGVkKCkgewoJCVN0cmluZyB0ZXN0ID0gInBldDpjYXQ6OmNhcjpob25kYTo6bG9jYXRpb246SmFwYW46OmZvb2Q6c3VzaGkiOwoJCWJvb2xlYW4gc3RhdGVpc2tleSA9IHRydWU7CiAKCQlNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKCQlpbnQga2V5c3RhcnQgPSAwOwoJCWludCBrZXllbmQgPSAwOwoJCWludCB2YWx1ZXN0YXJ0ID0gMDsKCQlpbnQgdmFsdWVlbmQgPSAwOwogCgkJZm9yKGludCBpID0gMDsgaSA8IHRlc3QubGVuZ3RoKCk7IGkrKyl7CgkJCWNoYXIgbmV4dGNoYXIgPSB0ZXN0LmNoYXJBdChpKTsKICAJCQlpZiAoc3RhdGVpc2tleSkgewoJICAgIAkJaWYgKG5leHRjaGFyID09ICc6JykgewoJICAgICAgICAgICAgICBrZXllbmQgPSBpOwkJCQoJICAgICAgICAgICAgICBzdGF0ZWlza2V5ID0gZmFsc2U7CgkgICAgICAgICAgICAgIHZhbHVlc3RhcnQgPSBpICsgMTsKCSAgICAJCX0KICAJCQl9IGVsc2UgewogIAkJCQlpZiAoaSA9PSB0ZXN0Lmxlbmd0aCgpIC0gMSB8fCAobmV4dGNoYXIgPT0gJzonICYmIHRlc3QuY2hhckF0KGkgKyAxKSA9PSAnOicpKSB7CiAgCQkJCQl2YWx1ZWVuZCA9IGk7CiAgCQkJCQlpZiAoaSArIDEgPT0gdGVzdC5sZW5ndGgoKSkgdmFsdWVlbmQgKz0gMTsgLy9jb21wZW5zYXRlIG9uZSBmb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCiAgCQkJCQlTdHJpbmcga2V5ID0gdGVzdC5zdWJzdHJpbmcoa2V5c3RhcnQsIGtleWVuZCk7CiAgCQkJCQlTdHJpbmcgdmFsdWUgPSB0ZXN0LnN1YnN0cmluZyh2YWx1ZXN0YXJ0LCB2YWx1ZWVuZCk7CiAgCQkJCQlrZXlzdGFydCA9IGkgKyAyOwogIAkJCQkJbWFwLnB1dChrZXksIHZhbHVlKTsKICAJCQkJCWkrKzsKICAJCQkJCXN0YXRlaXNrZXkgPSB0cnVlOwogIAkJCQl9CiAgCQkJfQoJCX0KCQlyZXR1cm4gbWFwOwoJfQoJCglwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IHNpbXBsZSgpewoJCU1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CgkJU3RyaW5nIHRlc3QgPSAicGV0OmNhdDo6Y2FyOmhvbmRhOjpsb2NhdGlvbjpKYXBhbjo6Zm9vZDpzdXNoaSI7CgkJU3RyaW5nW10gdGVzdDEgPSB0ZXN0LnNwbGl0KCI6OiIpOwoKCQlmb3IgKFN0cmluZyBzIDogdGVzdDEpIHsKICAgIAkJU3RyaW5nW10gdCA9IHMuc3BsaXQoIjoiKTsKICAgIAkJbWFwLnB1dCh0WzBdLCB0WzFdKTsKCQl9CgkJcmV0dXJuIG1hcDsKCX0KfQ==