List<Map.Entry<String, SomeClass>> comparingByKey = map.entrySet().stream()
.sorted(Map.Entry.comparingByKey((String s1, String s2) -> s1.length() - s2.length())) //Ну или по Value
.collect(Collectors.toList());
точно знаю как изнутри устроен HashMap. Коллизии возникают.тогда вы должны знать что при одинаковом key(коллизия возникла) просто заменится value. Вот с ситуацией если key не имеет собственную реализацию hash и compare то беда точно придет и результат может оказаться непредсказуемым.
public String[] split(String regex)
Splits this string around matches of the given regular expression.
This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.
The string "boo:and:foo", for example, yields the following results with these expressions:
Regex Result
: { "boo", "and", "foo" }
o { "b", "", ":and:f" }
Parameters:
regex - the delimiting regular expression
Returns:
the array of strings computed by splitting this string around matches of the given regular expression
Throws:
PatternSyntaxException - if the regular expression's syntax is invalid
Since:
Вообще же сравнивать скорость\удобность\доступность разных языков не совсем верно. В малых проектах(стартапы,прототипы) отталкиваются от того какой ЯП лучше знает разработчик и пишут на нем. В большом отталкиваются от стабильности ЯП и ищут разрабов на этом ЯП. В случае мутации проекта в крупный(это те ситуации когда проект взрывообразно стал популярен и совершенно точно нужно все переписывать) и при этом владельцы прекрасно понимают это и хотят поймать волну и не упасть с нее то отталкиваются от ЯП который будет максимально правильным для этого проекта.