Список и карта в Java

Если вы продолжите увеличивать целочисленный тип, он со временем переполнится и станет большим отрицательным значением. Если вы продолжите идти, в конечном итоге он снова станет 0, и цикл повторится.

Существуют удобные методы, помогающие избежать непреднамеренных переполнений, например Math.addExact() , но они обычно не используются в цикле.


Я знаю, что это переполнено. Я просто озадачен, что это переполняет это быстро. И мне кажется странным, что каждый раз, когда я приостанавливаю отладчик, я равняюсь 0.

Когда вы приостанавливаете работающий поток, рассмотрите возможность медленного вызова потока в println(), который пересекает огромный стек Java и собственного кода ОС, в сравнении с вероятностью посадки в тесте вашего цикл while, который просто увеличивает локальную переменную. Чтобы увидеть что-то, кроме оператора печати, вам понадобится довольно быстрый триггерный палец. Попробуйте вместо этого пройти.

Когда что-то случается 4 миллиарда раз подряд, вполне вероятно, что это произойдет в следующий раз. Предсказание ветвлений здесь поможет в любом случае, и вполне возможно, что оптимизирующая среда выполнения удаляет операцию приращения и полностью тестирует, поскольку промежуточные значения i никогда не читаются.

24
задан Bart Kiers 22 September 2010 в 17:33
поделиться

3 ответа

Зависит от ваших проблем с производительностью. Карта более явно HashMap гарантирует O (1) на вставках и удалениях. Список имеет в худшем случае O (n), чтобы найти предмет. Поэтому, если вы будете так любезны, уточните, каков ваш сценарий, мы можем помочь больше.

3
ответ дан 28 November 2019 в 22:27
поделиться

Map и List служат разным целям.

List содержит коллекцию предметов. Заказано (вы можете получить элемент по индексу).

Map содержит ключ сопоставления -> значение. Например. сопоставить человека с позицией: "JBeg" -> "программист". И это неупорядочено. Вы можете получить значение по ключу, но не по индексу.

0
ответ дан 28 November 2019 в 22:27
поделиться

Скажем, у вас есть группа студентов с именами и идентификационными номерами студентов. Если вы поместите их в список, единственный способ найти ученика с student_id = 300 - это посмотреть на каждый элемент списка по одному, пока не найдете нужного ученика.

С картой вы связываете идентификатор каждого учащегося и его экземпляр. Теперь вы можете сказать: «Возьми меня ученик 300» и немедленно верни этого ученика.

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

Скажем, у вас были точно такие же экземпляры учеников, но вашей задачей было составить отчёт с именами всех учеников. Вы поместили бы их в Список, так как не было бы необходимости выбирать отдельных студентов и, следовательно, не нужно было бы иметь Карту.

39
ответ дан 28 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: