Stalker_RED: Да это-то понятно, непонятно другое! Почему не использован ни один внятный паттерн обработки исключений... ведь есть же fail fast, recovery, handling at work level / at case level и т.д. Где все эти замечательные вещи в коде глубокоуважаемого Гуру? (это все мысли вслух под тегом "сарказм", на случай, если целью кода было использовать максимальное количество паттернов)
frosty7777777: Строго говоря, нет. Само понятие "база данных" впервые появилось в 1962 для обозначения наборов данных, хранящихся на носителях с прямым доступом, которые тогда стали приходить на смену носителям с последовательным доступом (магнитные и перфоленты).
Но если посмотреть шире, то сами принципы организации данных возникли задолго до этого (например, разнообразные картотеки). Так что, хотя и нельзя, но если очень хочется, то можно :)
Username: Трудно понять, что значит "приавильного". Разных имплементаций связаного списка можно придумать вагон и маленькую тележку... имплементация может, например, гарантировать уникальность значений в списке, а может вообще не интересоваться значениями, может оперировать с элементами И значениями, а может только со значениями, или только с элементами, наконец, может быть generic. И для каждой разные подходы будут правильными.
Eugene: Перекрытие метода equals() без одновременного перекрытия hashCode() - прямой путь в адъ, т.к. использование экземпляров таких классов в других, дже правильно написаных местах, чревато трудно отлавливаемыми косяками и иногда даже утечкой памяти.
А вообще, очень похоже, что странный код в вопросе получен неумелой доводкой напильником какого-то правильного кода из какого-то примера. Совершенно непонятно, зачем внутренний класс объявлен публичным и почему список добавляет int, а удаляет Node :)
Ладно, договорились - как только уволят из разработчиков, пойду в писатели :) А если серьезно, я считаю, что дело тут не в учебниках, т.к. по хорошему - это задача нормального препода, так объяснять студентам, чтоб было понятно и просто одновременно.
Навскидку распознаются отсылки к произведениям Ильфа и Петрова, Джона Фаулза, к/ф "Бриллиантовая рука", "Россия молодая"... короче, к произведениям, которые уже не одно поколение охотно разбирает на цитаты.
Если человек, не знакомый с арифметикой захочет понять, что означает "два плюс три равно пять", ему недостаточно объяснить, что такое "два", или что такое "плюс"!
Так же и тут. Для понимания, что такое localhost, сначала нужно понять, что такое хост вообще, что такое сеть, что такое имя хоста, что такое сервер, как это все связано с адресами и номерами портов, а те - с, собственно, одним конкретным компом (который, в зависимости от контекста, могут называть и "хостом", и "сервером", и "localhost"). Так что, чтоб можно было объяснить на пальцах, уточните, с какого места, собственно, непонятно.
На месте тимлида я бы подал заявление об уходе по причине вопиющего служебного несоответствия... т.к. тестирование, вообще-то, проводится до, а не после, и уж никак не на продакшене.
Александр: Пустышный цикл в моем варианте крутится в главном потоке. Таймер (один или более) крутится в другом потоке, а ивенты выполняются каждый в своем отдельном потоке. Это все можно сделать компактнее, экономнее, и уж наверняка - без Свинга... но суть от этого не поменяется. Суть заключается в том, что главный поток, после того, как создал экземпляр класса, позапускал таймер или другие потоки (например в ExecutionService) остается как-бы без работы, и, как только он достигнет конца метода main, JVM завершится, и поубивает все остальное, болтающееся в фоне. Соответственно, есть только два варианта: либо этот поток может выполнять еще что-то полезное (это было бы разумнее, но не всегда возможно), либо цикл с проверкой условия выхода.
Sapun4ik: Нужно цепляться к stdout процесса и читать оттуда все, что душе угодно. (Код завершения - это просто инт, в нем ничего подробного не передать). Смотрите примеры - там все разжевано.
И еще одно незначительное дополнение к исчерпывающему ответу: если забросали, то это был определенно не клич, а дерьмо, помидоры или, на крайняк, тапочки. А клич - его в русском языке, обычно, бросают, например: "Все за парту, учить великий и могучий!", или же издают (если клич победный).
Учтите, что за использование непонятных слов для наименования переменных, юниоров принято заставлять отжиматься от пола по 5 раз за одну переменную :) "massiv" на английском называется "array".
На самом деле все несколько сложнее. Наиболее короткоживущие переменные - локальные. Память под них выделяется на стеке (не путать с объектом - если они объектного типа; он, конечно, хранится в куче.) Эти переменные пропадают, сразу после выхода потока из их области видимости.
Далее... объекты в куче. Даже если на них больше не ссылается ни одна переменная, они могут там оставаться до тех пор, пока сборщик мусора не примет решение их удалить. Насчет того, когда это произойдет, в принципе, нет никаких гарантий.
Ну и, наконец, если мы говорим про Андроид, там есть такая забавная шняга, как ООМ киллер, который может убить активити со всеми ее переменными, если в системе заканчивается память. Потом, если нужно, она будет востановлена, но вот о повторной инициализации нужных переменных нужно заботиться самостоятельно.
EndUser: Да нет же, дело тут, думаю, отнюдь не в презрении... все были когда-то нубами. Просто если дать некий список, у новичка может сложиться ложное ощущение, что вот осилишь его, и ты - готовый программист, "свободно владеющий". А потом он наступит (в худшем случае - прямо на собеседовании!) на какое-нибудь разименование нулевого указателя или сборщик мусора, которых в списке не было по причине их элементарности с т.з. "профессионала"... и будет чувствовать себя жестоко обманутым. Мне кажется более правильным с самого начала честно объяснить, что нет предела, которого можно достичь и на этом успокоиться.