Сортировка карты по сложности O (log (n)) - PullRequest
0 голосов
/ 11 июня 2018

Как мне отсортировать карту (со сложностью O(log(n))) по идентификатору игрока или имени игрока ??

private static final Map<Integer,Player> PLAYERS= new TreeMap<>();
       static {
           PLAYERS.put(1, new Player(1, "messi"));
           PLAYERS.put(2, new Player(7, "ronaldo"));
           PLAYERS.put(3, new Player(3, "neymar"));
           PLAYERS.put(4, new Player(4, "iniesta"));
           PLAYERS.put(5, new Player(5, "ronaldo"));
           PLAYERS.put(6, new Player(2, "pique"));
           PLAYERS.put(7, new Player(6, "suarez"));
       }

Я сделал этот компаратор, например:

public static Comparator<Player> PlayerNameComparator = new 
Comparator<Player>() {

public int compare(Player p1, Player p2) {

String playerName1 = p1.getName().toUpperCase();
String playerName2 = p2.getName().toUpperCase();

return playerName1.compareTo(playerName2);
}
};

но я не знаю, как это исправить:

public static Collection getAllByName() {

Map sortedPlayersByName = new TreeMap(PLAYERS);

Collections.sort(sortedPlayersByName, Player.PlayerNameComparator);
return sortedPlayersByName.values();    
 }

1 Ответ

0 голосов
/ 11 июня 2018

В вашем примере вы используете древовидную карту.По умолчанию он будет отсортирован по ключу, если вы не напишите компаратор для сортировки по значениям.Так как Древовидная карта использует красное черное дерево, ваше время вставки будет O (logN).

...