Филосиaия java брюса эккеля

Чтобы по-настоящему понять язык Java, необходимо рассматривать его не просто как набор неких команд и операторов, а понять его «философию», подход к решению задач, в сравнении с таковыми в других языках программирования. На этих страницах автор рассказывает об основных проблемах написания кода: в чем их природа и какой подход использует Java в их разрешении. Поэтому обсуждаемые в каждой главе черты языка неразрывно связаны с тем, как они используются для решения определенных задач.

Ссылки на скачивание книги Брюс Эккель «Философия Java» (4-е полное издание):

Библиотека программиста запись закреплена

Философия Java. 4-е издание. (Брюс Эккель)

Java нельзя понять, взглянув на него только как на коллекцию некоторых характеристик, — необходимо понять задачи этого языка как частные задачи программирования в целом.
Эта книга — о проблемах программирования: почему они стали проблемами и какой подход использует Java в их решении. Поэтому обсуждаемые в каждой главе черты языка неразрывно связаны с тем, как они используются для решения определенных задач.
Эта книга, выдержавшая в оригинале не одно переиздание, за глубокое и поистине философское изложение тонкостей языка считается одним из лучших пособий для программирующих на Java.
В четвертом издании автор постарался полностью интегрировать усовершенствования Java SE5/6, включить и использовать их во всей книге.

На вопрос «С какой книги начать изучение Java?» очень часто отвечают: Thinking in Java Брюса Эккеля.
Но вот беда — эта книга (4-е издание) не содержит в конце каждой из глав вопросы и практикум…

Именно того, что способствует наиболее эффективному изучению языка!

Обучаясь по этой книги, я делал небольшие заметки по поводу моментов, которые были для меня новыми или интересными. Причем оформлял их в виде коротких вопросов. После прочтения каждой главы пробегался по этому списку и придумывал себе задачки, аналогичные коду, приведенному в главе.

Почему бы не поделиться этими заметками-вопросами с Вами?

Приведен список составленных на данный момент вопросов.
Вопросы типа «Что такое внутренний класс?» отсутствуют. Такие определения, на мой взгляд, четко формируются по мере чтения главы и не требуют скучного и банального вопроса для подкрепления.

Читайте также:  Что выбрать конвектор или тепловентилятор

А также отсутствуют вопросы, наподобие «что такое stack? каковы особенности его работы?». Они являются базовыми для многих языков и для всего программирования в целом. Поэтому старался их избегать.

В целом, я старался формулировать вопросы о различных интересных тонкостях и нюансах, которые требуют периодического повторения.

В конце вопросника приведен сделанный мной перевод некоторых упражнений-заданий, опубликованных в англоязычном оригинале книги. Указаны страницы, на которых эти упражнения напечатаны.

Вас приятно удивит, что к большинству ответов на вопросы добавлены номера страниц русского издания. На этих страницах также напечатаны ответы на сформулированные вопросы.

Примитивы в качестве элементов контейнера выступать не могут. В контейнер можно поместить только ссылки на объекты. Однако механизм автоупаковки (Autoboxing) автоматически преобразует примитив в объектный тип. Следовательно программист может «забыть» про вышеупомянутое ограничение.
(ответ дан совместно с MrD)

11. 1. Создайте класс Fruit. Класс должен содержать поле int weight, конструктор с инициализацией этого поля и метод printWeight(), печатающий значение weight.
В методе main добавьте несколько объектов Fruit в контейнер List. Вызовите printWeight() для каждого из объектов следующими способами:
А) с помощью метода get();
Б) с помощью итератора.

11.2. Класс Fruit из 11.1 поместите в контейнер map. Пусть в качестве ключа будет указано имя владельца, в качестве значения – объект типа Fruit. Реализуйте перебор каждого объекта Fruit по ключу и вызов метода printWeight() для найденного объекта: с помощью foreach; с помощью iterator.

Спасибо quarantino за компактный вариант решения с итератором.
класс Fruit — см. задание 11.2

11.3. Используя Comparator для PriorityQueue обеспечьте сортировку строковых переменных по размеру.

Примечание: пример взят из интернета.

Перевод упражнений из оригинала книги:
11.4. Создайте новый класс Gerbil с полем int gerbilNumber. Пусть поле инициализируется конструктором. Создайте также метод hop(), который печатает «Gerbil’s number which is hopping is: » и значение переменной gerbilNumber. Разместите объекты Gerbil в контейнер ArrayList. Реализуйте метод get() для прохода по списку с вызовом метода hop() для каждого из этих объектов.

Читайте также:  192 168 0 1 Router login

11.5. Модифицируйте SimpleCollection.java так, чтобы использовать метод Set для переменной «с». Модифицируйте innerclasses/Sequence.java таким образом, чтобы туда можно было бы добавлять любое количество элементов.

11.6. Напишите класс Generator, в котором есть список имен героев ваших любимых фильмов (объекты типа String). Пусть каждый объект этого списка возвращается посредством метода next(). При достижении конца созданного списка необходимо вернуться обратно в начало списка.
Используйте класс Generator для заполнения контейнеров типа ArrayList, LinkedList, HashSet, LinkedHashSet, TreeSet. Напишите универсальный метод, который выводил бы содержание каждого из массивов.

11.7. Модифицируйте ListFeatures.java таким образом, чтобы в нем использовались объекты типа Integers вместо объектов типа Pets. Объясните различия в результатах работы, возникшие из-за этой модификации.

11.8. Повторите упражнение 11.7 для ListFeatures.java, но замените Pets на Strings.

11.9. Создайте класс, который генерирует инициализированный массив объектов другого класса. С помощью этого массива заполните контейнер типа List. Создайте еще один контейнер, используя subList() для List. Затем удалите элементы, которые вы извлекли с помощью subList(), из контейнера, из которого вы их извлекали.

11.10. Шутливое упражнение на использование различных контейнеров и их методов (придумано самостоятельно)
Пусть у нас есть список из расходов, изначально состоящий из 3-х элементов: «food», «medicine», «entertainment». Необходимо записать эти элементы в контейнер List, причем порядок их следования не должен измениться.

1) Мы вдруг поняли, что забыли добавить в список расходы на выплату кредитов. Необходимо разместить запись «taxes» между «food» и «medicine» без использования индексов записей напрямую.
2) Жена притащила дополнительный отдельный список расходов с записями: «coat», «restaurant». Делать нечего: прибавить расходы в конец списка (чтобы не обольщалась).
3) Однако, теща притащила нам еще пару пунктиков: «theater», «home decoration» и «medicine». Может быть, какой-то из этих пунктов у Вас уже был. На всякий случай копируем содержание первого контейнера в новый контейнер типа Set и после, не задумываясь, добавляем эти пунктики в конец списка.
4) Не долго думая, мы создали ассоциативный динамический список расходов map , где Integer – планируемые затраты на каждый из пунктов расходов (суммы выбирайте самостоятельно).
5) Мы резко разбогатели решили увеличить сумму всех затрат на 30%. Напишите метод, который это сделает за вас.
6) Стоп! Довольно с нас «home decoration!» И, пожалуй, на coat уходит слишком много. Занесите эти пункты в новый List и передайте методу, который, считав этот лист, в контейнере Map отыщет соответствующие статьи расходов и уменьшит их на … 80%!
7) Свалим-ка часть расходов на тещу. Причем, сделаем ей сюрприз! Сгенерим два случайных числа, которые будут определять начальный и конечный индексы, все расходы между которыми будут записаны в отдельный список List (который впоследствии будет теще подсунут). Не забудем обновить Map, выкинув из него соответствующие статьи расходов.
8) Напишем метод, который определит, на что уходит самая малая сумма расходов, напечатаем название этих расходов и с гордостью удалим этот элемент из списка.
9) Однако, к нам подвалили дополнительные расходики: «food» и «restaurant», оформленные в виде очередного массива! Проверим, есть ли они в нашем списке эти пункты? И если хотя бы один расход есть, то ни в коем случае не будем их добавлять! Если же ничего этого нет, то (ничего не поделаешь), добавляем сразу оба эти пункта (как я проголодался!).
10) Мы сошли с ума! Прочитаем из списка Map все Integer суммы оставшихся у нас расходов, запишем их в «какой-нибудь» контейнер, который сам их нам рассортирует по возрастанию, потом в ярости перемешаем и удалим с проходом в обратном порядке, неистово применив для этого специальный итератор.