Понимание поведения сортировки персонажа в HashSet - PullRequest
0 голосов
/ 11 октября 2019

В HashSet порядок вставки состоит из символов нижнего регистра («a») и верхнего регистра («A»). Как это поведение может быть оправдано?

public class SetCharTest {
    public static void main(String[] args) {
        String str = "AzbaAacb"; // this is input string
        System.out.println("Unique Characters are: " + uniqueCharSet(str));
    }

    public static Set<Character> uniqueCharSet(String str) {
        Set<Character> charSet = new HashSet<Character>();

        for(int i = 0; i < str.length(); i++)
            charSet.add(str.charAt(i));

        for(Character c : charSet)
            System.out.println("Hashcode of " + c + " is: " +c.hashCode());

        return charSet;
    }
}
Case 1:
inupt:  "AzbaAacb"
Output:
    Hashcode of A is : 65
    Hashcode of a is : 97
    Hashcode of b is : 98
    Hashcode of c is : 99
    Hashcode of z is : 122
    Unique Characters are : [A, a, b, c, z]

Case 2:
Input: "zbaAacb"
output:

Hashcode of a is : 97
Hashcode of A is : 65
Hashcode of b is : 98
Hashcode of c is : 99
Hashcode of z is : 122
Unique Characters are : [a, A, b, c, z]

Здесь в обоих случаях позиция «A» (или «a») зависит от порядка вставки. Но как?

Этот класс реализует интерфейс Set, поддерживаемый хеш-таблицей (фактически, экземпляром HashMap). Это не дает никаких гарантий относительно порядка итераций множества;в частности, это не гарантирует, что порядок останется постоянным с течением времени. Этот класс допускает нулевой элемент. Этот класс обеспечивает постоянную производительность по времени для основных операций (добавление, удаление, содержание и размер), при условии, что хеш-функция правильно распределяет элементы по сегментам.

Источник

Поскольку операция добавления HashSet основана на HashCode, она неявно создает отсортированный вывод (от "a" до "z"). Как описано здесь и здесь .

В соответствии с ответом в этом потоке: «Порядок вставки напрямую влияет на порядок итерации, когда у вас естьстолкновение ковша ". Но это не похоже на столкновение «а» и «А» в вышеуказанной программе. Так почему же сохраняется порядок вставки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...