Это работает:
Iterator<Integer> iter = l.iterator();
while (iter.hasNext()) {
if (iter.next().intValue() == 5) {
iter.remove();
}
}
Я предположил, что поскольку цикл foreach является синтаксическим сахаром для итерации, использование итератора не помогло бы ... но оно дает вам эту функциональность .remove()
.
Математика для Программистов . Хорошее чтение.
Я думаю, что алгоритмы и теория очень важны. Способность придумать быстрое, и корректный решение - то, что дифференцирует хороших программистов от остальных. Кроме того, способность доказать Ваш алгоритм (использующий стандартные методы доказательства - индукция, противоречие, и т.д.) одинаково важна.
Почему все включают вероятность и статистику в золотом списке, не упоминая исчисление? Нельзя понять то, о чем вероятность и статистика, по крайней мере, без практического знания пределов, производных, интегралов и ряда. И в целом, исчисление (вместе с линейной алгеброй) является рабочей лошадью весь математика.
Ну, это зависит от того, какова Вы цель. Как кто-то сказал, Линейная алгебра, Комбинаторика, Вероятность и Статистика и Теория графов важны, если Вы в решение тяжелых проблем. Асимптотический рост функций (Разрядная о нотация) очень важен. Необходимо будет также освоить суммирование и ряд, если необходимо работать над анализом некоторых более сложных алгоритмов (см. приложение на Cormen& Введение других к Алгоритмам).
, Даже если Вы в "Java для предприятия" или "серверной стороны PHP", Вы найдете некоторую Сложность Статистики и Алгоритма (следовательно комбинаторика, индукция, суммирование, ряд, и т.д.) полезный, когда Ваш босс захочет, чтобы Вы заставили сервер работать быстрее, и добавление, что новые аппаратные средства, кажется, не помогают.:-) я был через это однажды.
Дискретная математика
линейная алгебра
комбинаторика
вероятность и статистика
теория графов
Мое математическое образование действительно плохо (Геолог по образованию), но я взял дискретная математика класс в средней школе, и я использую понятия каждый день в качестве программиста. Это - вероятно, самый ценный урок, который я посещал по всему своему образованию, поскольку это касается моей текущей профессии.
Назад в школе, на моих преподавателей сказал для бизнес-приложений, все, что необходимо знать, знают, добавляют, вычитают, умножаются и делятся. Все другие формулы запрашивающая сторона будет знать и сообщать Вам, что необходимо. Теперь поймите, что это для финансирования создания отчетов, и приложение сфокусировало школу. По сей день это сохранялось для меня. Я никогда не должен был знать больше, чем это.
Была книга, которая рекомендовалась..., заголовок был чем-то как Конкретная Математика. Это рекомендовалось в нескольких вопросах.
Основная Алгебра и Статистика являются хорошими начальными точками и основой для большого количества других полей.
Вот простой, который экранирует меня, когда я вижу разработчиков, которые не понимают его:
- Порядок Операций
Я сказал бы булеву логику. И, ИЛИ, XOR, НЕТ. Я нашел как программист, мы используем это чаще, чем остальная часть математических понятий.
Я думаю, что это зависит от Вашего фокуса. Несколько лет назад я купил набор Искусства Программирования Donald Knuth. После рассмотрения книг я понял в значительной степени, что все - доказательства исчисления. Если Вы интересуетесь разработкой Ваших собственных универсальных алгоритмов и доказательств для них, то я рекомендую способности понять вышеупомянутые книги начиная с, с чем Вы имели бы дело в том мире. С другой стороны, если Вы только хотите/нуждаетесь использовать различную сортировку/поиск/дерево/и т.д.... стандартные программы тогда большая нотация O как минимум, булева математика, и общая алгебра будет прекрасна. Если Вы имеете дело с 3D тогда геометрия и аккуратные также.
я склонен быть больше на стороне использования, чем создание доказательств, и в то время как я хотел бы думать, что я сделал некоторые умные вещи за эти годы, я никогда не садился и разрабатывал новую программу сортировки. Лучший совет, который я могу дать, изучают то, в чем Вы нуждаетесь для своего поля, но представляете себя более высоким уровням, таким образом, Вы знаете, что это существует и сколько еще там должен учиться, Вы не получите много роста иначе.
Запустите с того, что мы люди CS называют "дискретной математикой". Исчисление и линейная алгебра могут войти довольно удобные также, потому что они делают первый шаг к большому количеству доменов приложения. Как только Вы освоили те три, пойдите для теории вероятности. Те 4 получат Вас к компетентности в 95% (я составил это) доменов приложения.
Конкретная Математика затрагивает большинство главных тем. Хорошая книга по Дискретной Математике, как Rosen дискретная математика и Ее Приложения , заполнит любые разрывы.
Для дискретной математики, здесь потрясающий набор 20 лекций из Университета Arsdigita. Каждый - приблизительно час и двадцать минут длиной.
Большая нотация O в общем анализе алгоритма, и относительно стандартных наборов (сортировка, вставка извлечения и удаление)
В порядке важности:
Что-либо более усовершенствованное, чем это является обычно определенным для алгоритма или проблемно-ориентированным. В зависимости от которых областей Вы интересуетесь, в следующем мае также быть релевантными:
Понимание функционирует, также полезно (не помните то, что математический термин для той области), но если Вы знаете, как программировать Вас, вероятно, уже делают.
Моя точка быть: десятилетний должен знать, что достаточно математики в состоянии понять программирование. Нет действительно большого количества математики, требуемой для основного понимания вещей. Это - все о логике, действительно.
"Доказательством индукцией" является базовое математическое понятие для программистов для знания.
Булева алгебра фундаментальна для понимания управляющих структур и рефакторинга. Например, я видел много ошибок, вызванных программистами, которые не знали (или не мог использовать), закон deMorgan. Как другой пример, сколько программистов сразу распознает, что
if (condition-1) {
if (condition-2) {
action-1
} else {
action-2
} else {
action-2
}
может быть переписан как
if (condition-1 and condition-2) {
action-1
} else {
action-2
}
, дискретная математика и комбинаторика чрезвычайно полезны в понимании производительности различных алгоритмов и структур данных.
, Как упомянуто Baltimark, математическая индукция очень полезна в обосновании о циклах и рекурсии.
Теория множеств является основанием реляционных баз данных и SQL.
Посредством аналогии, позвольте мне указать, что плотники обычно используют множество методов эмпирического правила в построении вещей как крыши и лестницы. Однако знание геометрии позволяет Вам решать проблемы, для которых у Вас нет "консервированного" эмпирического правила. Это похоже на обучение читать через фонетику по сравнению с распознаванием вида базового словаря. 90 + % времени там не является большим различием. Но когда Вы сталкиваетесь с незнакомой ситуацией, ОЧЕНЬ хорошо иметь инструменты для разработки решения сами.
Наконец, суровость/точность, требуемая математикой, является очень полезной подготовкой к программированию, независимо от определенной методики. Снова, многие ошибки в программировании (или даже спецификации), что я видел в своей карьере, имеют неаккуратные взгляды в своей первопричине.
Я пошел бы с полями, которые заявил Landon:
Дискретная Математика, Линейная алгебра, Комбинаторика, Вероятность и Статистика, Теория графов
и добавляют математическую логику.
Это дало бы Вам власть на большинстве полей CS. Если Вы хотите войти в специальные поля, необходимо погрузиться в некоторые области особенно:
Computer graphics -> Linear Algebra
Gaming -> Linear Algebra, Physics
Computer Linguistics -> Statistics, Graph Theory
AI -> Statistics, Stochastics, Logic, Graph Theory
Глава 1 "Искусства Программирования" имеет целью обеспечивать точно это.
Проверить книгу Основы компьютерных наук
Авторы этой книги: Аль Ахо и Джефф Уллман, и вся книга доступна в Интернете.
Это то, что авторы говорят в предисловии к цели этой книги:
« Основы компьютерных наук охватывает темы, которые часто оказываются разделенными
между дискретным курсом математики и последовательностью на втором курсе на компьютере
наука о структурах данных. Мы намеревались выбрать математический
основы с прицелом на то, что действительно нужно пользователю компьютера, а не
что мог бы выбрать математик »
Да, я бы сказал, что базовое понимание индукции помогает понять, что n представляет в алгоритмах. Также полезны некоторые логические и дискретные структуры.
Вероятность и статистика очень полезны, если вам когда-либо придется делать что-то похожее на машинное обучение.
Я рассказываю об основах в своем сообщении в блоге « Computing Your Skill », где обсуждаю, как работает алгоритм ранжирования и подбора игроков TrueSkill в Xbox Live.
сайт для освежения знаний по математике: http://www.khanacademy.org/