Если вы продолжите увеличивать целочисленный тип, он со временем переполнится и станет большим отрицательным значением. Если вы продолжите идти, в конечном итоге он снова станет 0, и цикл повторится.
Существуют удобные методы, помогающие избежать непреднамеренных переполнений, например Math.addExact()
, но они обычно не используются в цикле.
Я знаю, что это переполнено. Я просто озадачен, что это переполняет это быстро. И мне кажется странным, что каждый раз, когда я приостанавливаю отладчик, я равняюсь 0.
Когда вы приостанавливаете работающий поток, рассмотрите возможность медленного вызова потока в println()
, который пересекает огромный стек Java и собственного кода ОС, в сравнении с вероятностью посадки в тесте вашего цикл while, который просто увеличивает локальную переменную. Чтобы увидеть что-то, кроме оператора печати, вам понадобится довольно быстрый триггерный палец. Попробуйте вместо этого пройти.
Когда что-то случается 4 миллиарда раз подряд, вполне вероятно, что это произойдет в следующий раз. Предсказание ветвлений здесь поможет в любом случае, и вполне возможно, что оптимизирующая среда выполнения удаляет операцию приращения и полностью тестирует, поскольку промежуточные значения i
никогда не читаются.
Зависит от ваших проблем с производительностью. Карта более явно HashMap гарантирует O (1) на вставках и удалениях. Список имеет в худшем случае O (n), чтобы найти предмет. Поэтому, если вы будете так любезны, уточните, каков ваш сценарий, мы можем помочь больше.
Map
и List
служат разным целям.
List
содержит коллекцию предметов. Заказано (вы можете получить элемент по индексу).
Map
содержит ключ сопоставления -> значение. Например. сопоставить человека с позицией: "JBeg" -> "программист". И это неупорядочено. Вы можете получить значение по ключу, но не по индексу.
Скажем, у вас есть группа студентов с именами и идентификационными номерами студентов. Если вы поместите их в список, единственный способ найти ученика с student_id = 300 - это посмотреть на каждый элемент списка по одному, пока не найдете нужного ученика.
С картой вы связываете идентификатор каждого учащегося и его экземпляр. Теперь вы можете сказать: «Возьми меня ученик 300» и немедленно верни этого ученика.
Используйте карту, когда вам нужно выбрать определенных членов из коллекции. Используйте Список, когда это не имеет смысла.
Скажем, у вас были точно такие же экземпляры учеников, но вашей задачей было составить отчёт с именами всех учеников. Вы поместили бы их в Список, так как не было бы необходимости выбирать отдельных студентов и, следовательно, не нужно было бы иметь Карту.