Извлечение данных в HashSet - PullRequest
0 голосов
/ 25 октября 2018

Я хочу знать, каким образом данные извлекаются в HashSet. Я вставил данные в другом порядке, а выходные данные - в другом порядке.Может кто-нибудь, пожалуйста, расскажите логику этого?

Код такой: -

    class Test 
    { 
        public static void main(String[]args) 
        { 
            HashSet<String> h = new HashSet<String>(); 

            // Adding elements into HashSet using add() 
            h.add("India"); 
            h.add("Australia"); 
            h.add("South Africa"); 
            System.out.println(h); 
        }
}

Вывод: - [Южная Африка, Австралия, Индия]

Ответы [ 5 ]

0 голосов
/ 25 октября 2018

Используйте LinkedHashSet, если вы хотите, чтобы он поддерживал порядок элементов.

0 голосов
/ 25 октября 2018

В соответствии с вышеизложенным, пожалуйста, смотрите Javadoc для HashSets - заказ не гарантируется.https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html

0 голосов
/ 25 октября 2018

HashSet работает так же, как HashMap со значением.Более того, он внутренне использует HashMap со значением константы Object, называемым «PRESENT»Делая это, HashSet гарантирует уникальность, но не порядок. Расположите элементы набора аналогично тому, как это делает Hashmap.

Вы можете увидеть реализацию HashSet в Интернете.

0 голосов
/ 25 октября 2018

Как уже говорилось, порядок элементов в HashSet не гарантированно ни будет, ни постоянным во времени.

Это связано с характером базовой структуры данных.

В вашем случае выглядит так, как будто строки были сохранены в очереди LIFO, но другая реализация HashSet может сделать что-то по-другому (и даже эта может, когда больше элементов будет вставлено, начнут вести себя по-другому).

0 голосов
/ 25 октября 2018

Из Javadoc HashSet

Не дает никаких гарантий относительно порядка итерации набора;в частности, это не гарантирует, что заказ останется постоянным во времени.

...