Максимальный размер HashSet - PullRequest
2 голосов
/ 17 марта 2012

Итак, в основном, я генерирую случайный IP-адрес 10000, и я хотел сохранить все те IP-адреса, которые найдены в HashSet, но, согласно моим расчетам, было найдено около 6000 IP-адресов, но в HashSet сохраняется только 700 IP-адресов?Есть ли какие-то ограничения в HashSet с точки зрения хранения String.Любые предложения будут оценены.

   Set<String> ipFine = new HashSet<String>();
        long runs = 10000;
            while(runs > 0) {

            String ipAddress = generateIPAddress();

            resp = SomeClass.getLocationByIp(ipAddress);

            if(resp.getLocation() != null) {

                 ipFine.add(ipAddress);
                        }

               runs--;

         }

Ответы [ 2 ]

5 голосов
/ 17 марта 2012

Насколько вам известно, ограничения нет (ограничение - это максимальный размер массива, равный 2 ** 31).

Однако Sets хранит только уникальные значения, поэтому я предполагаю, что вы сгенерировали только 700 уникальных адресов.

Измените ваш код следующим образом:

if(resp.getLocation() != null) {
    if (ipFine.add(ipAddress)) { // add() returns true if the value is unique
        runs--; // only decrement runs if it's a new value
    }
}

Эта модификация будет означать, что вы будете продолжать цикл, пока не получите 10000 уникальных значений.

4 голосов
/ 17 марта 2012

Вы уверены, что у вас есть 6000 различных IP-адресов?Я предполагаю, что у вас было 6000 IP-адресов, но большинство из них были дубликатами ...

Вы определенно не столкнулись с проблемой максимального размера.

(Обратите внимание, что указанный вами код в любом случае недействителен - вы объявили ipFine дважды.)

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