ebook img

Java. Решение практических задач PDF

718 Pages·2021·18.346 MB·Russian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Java. Решение практических задач

C Java oding Problems lmprove your Java Programming skills Ьу solving real-world coding challenges Anghel Leonard Pacl<t> BIRMINGHAM -MUMBAI Анджел Леонард РЕШЕНИЕ ПРАКТИЧЕСКИХ ЗАДАЧ Санкт-Петербург БХВ-Петербург» « 2021 УДК 004.438 ББК 32.973-018. l Л47 Леонард А. Л47 Java. Решение практических задач : пер. с англ. -СПб.: БХВ-Петербург, 2021. -720 с.: ил. ISBN 978-5-9775-6719-0 Рассмотрены задачи, встречаюшиеся в повседневной работе любого разработ­ чика в среде Java. Приведено более приложений, содержащих свыше при­ 300 1000 меров. Продемонстрированы эффективные практические приемы и технические решения с учетом сложности кода, производительности, удобочитаемости и мно­ гого другого. Рассмотрены строки, числа, объекты, массивы, коллекции и структуры данных, работа с датой и временем. Приведены задачи на логический вывод типов, а также файловый ввод/вывод. Представлены задачи, связанные с АР! рефлексии Java. Особое внимание уделено программированию в функциональном стиле, задачам с привлечением конкурентности, правилам работы с классом Optional, а также АР! НТТР-клиента и АР! протокола WebSocket. Для Jаvа-программистов УДК 004.438 ББК 32.973-018.1 Группа подготовки издания: Руководитnерлоье кта ЕвгениРйы баков Завр.е дакцией Людмила Гауль Перевосд а нглийского АндреЛяо гунова Комnьютернваеяр стка НатальиС мирновой Оформлениоеб ложки КариныС оловьевой © PackPtu Ыishi2n0g1 9F.i rpsutЫ ishiendt heE nglilsahn guaugned etrh et it'lJea vCao dinPgr oЫem-s (9781789801415)' Вnервыоеn убликовнаана он глийскяозмы кnео дн азвани'еJмa vCao dinPgr oЫem-s( 9781789801415)' Подписаноп ечать в 30 04 21 Формат 1 Печатоьф сетная печ 70х100/16 Ycn n 58,05 Тираж экзЗ аказ 1200 № 8321 "БХВ-Петербург", Санкт-ПетербуГрогн,ч арнуаля, 191036, 20 Отпечатанво ПАО «Можайскипйо лиграфическкоимйб инат)> 143200Р,о ссияr ,М ожайску,л Мира,9 3 wwн oaompk ru, тел (4957)4 5·84-2(84,9 6382)0 -685 ISBN 978-1-78847-141-5 (англ.) © Packt PuЬ\ish1ng 2019 ISBN 978-5-9775-6719-0 (рус.) © Перевод на русский язык, оформление ООО "БХВ-Петербург", ООО "БХВ", 2021 О главление Составители . .. ... .. .. . . .. . . .... ... ......... . ............ ....... .... . . .. ........ ...... 19 ... . . .. .................. ...... . . .... . . ....... . . Об авторе ". ................. """. . ". . ". . """. ". ...................... ". . ". ..... ". ........................................... 19 .. О рецензентах . ". .......................................... "". .. ". ............................................. 19 .................... Предисловие .... .. ... . . .. ...... .......... ... ........... . .... .............. ....... .. ........ . ...... .. . .... 21 . ... .... . . .. . ..... .. . . . .. .. .. Для кого эта книга предназначена. ....." .. " ......................" ." .... " ........................................... 21 Что эта книга охватывает""" ............................... " ..." ". ." .".". ............................................. 22 Как получить максимальную отдачу от этой книги """.""".""".""""""""""."""""".""25 Файлы с примерами исходного кода. .............................. "."."" ........................................... 25 Цветные изображения. ........." ". . "".""" ............" """ ..................................................... " .. ""2 6 Код в действии .................................................... " .......................................................... " ..... 26 Условные обозначения .................................... """" ..." ." ................................................ """ 26 Комментарии переводчика ......................................................................... "."."""."." ......... 27 Глава 1. Строки, числа и математика .. . ... .. . .. .. .. .. .. .. . . ........ . . . . . 29 . ...... . .... .. ... .. . . ...... ............... Задачи 29 ...................................................................................................................................... Решения. ............................................................. " .......................................... " ..." .. """."""".32 1. Подсчет повторяющихся символов """""""""""."".""""."".". "" ""."."""""""". 32 О символах Юникода .................................................................... """." .. """ ....... 33 2. Отыскание первого неп овторяющегося символа """""""""""""""""""."""""". 36 3. Инвертирование букв и слов .................................................... " ... """"""" ... " ......" . 38 4. Проверка, содержит ли строковое значение только цифры """"""""""""""""". 39 5. Подсчет гласных и согласных ". .... """. ........................................ 40 ............................. 6. Подсчет появлений некоторого символа ......" .......................................................... 42 7. Конвертирование строки в значение типа int, long,float или dоиЫе """"""""" . .43 . 8. Удаление пробелов из строки . "". ...... ".". .. """.". ... ". . ". . ". ..................................... 44 ... 9. Соединение нескольких строк с помощью разделителя """""""""""""""""""" 44 . 1 О. Генерирование всех перестановок""""."".""""""""""""""".""."""""""""""" 46 11. Проверка, что строка является палиндромом """""""""""."""""""""""""""".48 12. Удаление повторяющихся символов "."".""""""""""""""""""""""""""."""".49 13. Удаление заданного символа""""""""""""""".""""""""".""".""."""""""""". 51 14. Отыскание символа с наибольшим числом появлений"""""""""""""."""""""52 15. Сортировка массива строк по длине"".""""""""""""""""""".""""""""""""." 54 16. Проверка наличия подстроки в строке"""""""""""""""""""".""""""""""""" 56 17. Подсчет числа появлений подстроки в строке"""""""""""""""""""""""."""" 56 Оглавление 18. Проверка, являются ли две строки анаграммами .. . . 58 ..................................... ......... 19. Объявление многострочных строковых литералов (или текстовых блоков) 59 п ...... 20. Конкатенирование одной и той же строки раз . . . . . . 60 .............................................. 21. Удаление начальных и замыкающих пробелов . . .. . . . . 62 ................. ............................ 22. Поиск наибольшего общего префикса . . .. . 62 .......................................... ..................... 23. Применение отступа. ................................................................................................ 63 24. Трансформирование строк. ...................................................................................... 65 25. Вычисление минимума и максимума двух чисел .................................................. 66 26. Сложение двух крупных чисел типа int/long и переполнение операции . 67 ............ 27. Строка как беззнаковое число с основанием системы счисления ....................... 68 28. Конвертирование в число посредством беззнаковой конверсии .. 69 ...................... . 29. Сравнение двух беззнаковых чисел ........................................................................ 70 30. Вычисление частного и остатка от деления беззнаковых значений .................... 70 31. Значение типа douЫe/float является конечным значением с плавающей точкой······························································································································ 71 32. Применение логического И/ИЛИ/исключающего ИЛИ к двум булевым выражениям. .................................................................................................................... 72 33. Конвертирование значения типа Biglnteger в примитивный тип .. . . 73 ........ ............. 34. Конвертирование значение типа long в значение типа int . .. . 74 ........... ..................... 35. Вычисление целой части деления и целой части остатка от деления . 75 ................ 36. Следующее значение с плавающей точкой ............................................................ 76 37. Умножение двух крупных значений типа int/long и переполнение операции . 77 ... 38. Совмещенное умножение-сложение (Fused Multiply Add) . . 79 ................................. 39. Компактное форматирование чисел ....................................................................... 79 Форматирование .................................................................................................... 80 Разбор числа ........................................................................................................... 82 Резюме. .................................................................................................................................... 83 Глава 2. Объекты, немутируемость и выражения switch 84 ••••••••••••••••••••••••.•.•..•.•............ Задачи 84 ...................................................................................................................................... Решения. .................................................................................................................................. 86 40. Проверка ссылок на null в функциональном и императивном стилях программирования .. . .. . . ... 86 ............ .................................................. .................................. 41. Проверка ссылок на null и выбрасывание собственного исключения NullPointerException ....................................................................................................... 89 42. Проверка ссылок на null и выбрасывание заданного исключения . . .. 91 .................. 43. Проверка ссылок на null и возврат непустых ссылок, заданных по умолчанию. ...................................................................................................................... 93 44. Проверка индекса в интервале от О до длины. ....................................................... 94 45. Проверка подынтервала в интервале от О до длины ............................................. 96 46. Методы equals() и hashCode(). ................................................................................. 97 4 7. Немутируемые объекты в двух словах ................................................................. 103 48. Немутируемая строка ............................................................................................. 104 Достоинства немутируемости строк . . . . . 104 ............................................................. Недостатки немутируемости строк .................................................................... 106 Является ли класс String полностью немутируемым? ...................................... 107 [ 6 ] Оглавление 49. Немутируемый класс . . . . . . . 108 ....................................................................................... 50. Передача мутируемых объектов в немутируемый класс и возврат мутируемых объектов из него ..................................................................................... 109 51. Написание немутируемого класса с помощью шаблона строителя. .................. 112 52. Предотвращение плохих данных в немутируемых объектах ............................. 114 53. Клонирование объектов ......................................................................................... 116 Клонирование ручное .......................................................................................... 117 Клонирование методом clone() ........................................................................... 117 Клонирование посредством конструктора ........................................................ 118 Клонирование посредством библиотеки Cloning .............................................. 119 Клонирование посредством сериализации ........................................................ 120 Клонирование посредством JSON . . .. . . . 121 .................................. ............................. 54. Переопределение метода toString() ....................................................................... 121 55. Выражения switch ................................................................................................... 123 56. Многочисленные метки вариантов ....................................................................... 126 57. Блоки инструкций. .................................................................................................. 126 Резюме. .................................................................................................................................. 127 Глава 3. Работа датой и временем ............................................................................. . 128 с .. Задачи 128 .................................................................................................................................... Решения. ................................................................................................................................ 130 58. Конвертирование строки в дату и время .............................................................. 130 До JDK 8 ............................................................................................................... 130 Начиная с JDK 8 ................................................................................................... 130 59. Форматирование даты и времени. ......................................................................... 134 60. Получение текущих даты и времени без времени или даты .............................. 137 61. Класс LocalDateTime из LocalDate и LocalTime ................................................... 137 62. Машинное время посредством класса lnstant ...................................................... 137 Конвертирование значения String в объект lnstant ........................................... 138 Прибавление времени к объекту Instant или вычитание времени из объекта lnstant .................................................................................................................... 138 Сравнение объектов lnstant ................................................................................. 139 Конвертирование из объекта Instant в LocalDateTime, ZonedDateTime и OffsetDateTime и обратно ................................................................................. 139 63. Определение временного периода с использованием значений на основе даты и значений на основе времени ........................................................................... 140 Период времени с использованием значений на основе даты ......................... 140 Продолжительность времени с использованием значений на основе времени ................................................................................................................. 142 64. Получение единиц даты и времени. ...................................................................... 144 65. Прибавление к дате и времени и вычитание из них ............................................ 145 Работа с датой ...................................................................................................... 145 Работа с LocalDateTime ....................................................................................... 145 66. Получение всех часовых поясов в UTC и GMT . .. 146 ............................. ................... До JDK 8 ............................................................................................................... 147 Начиная с JDK 8 ................................................................................................... 147 [ 7 ] Оглавление 67. Получение локальных даты и времени во всех имеющихся часовых поясах ... 148 До JDK 8 149 ............................................................................................................... Начиная с JDK 8 . . .. . . ... 149 ...................................... ...... .............................................. 68. Вывод на экран информации о дате и времени полета . 150 .............. ........................ 69. Конвертирование временной метки UNIX в дату и время . . 151 ............................... 70. Отыскание первого/последнего дня месяца . 152 ........................................................ 71. Определение/извлечение поясных смещений . . . . 154 .................................................. ДoJDK8 . 155 .............................................................................................................. Начиная с JDK 8 . . . 155 ................................................................................................ 72. Конвертирование из даты во время и наоборот . . . 156 ................................................ Date -lnstant . . . 156 .................................................................................................... Date -Loca!Date . 157 ................................................................................................ Date - DateLocalTime . . . . 158 ..................................................................................... Date -ZonedDateTime . 158 ....................................................................................... Date -OffsetDateTime . . . 159 ..................................................................................... Date -LocalTime . . . . 159 ............................................................................................. Date -OffsetTime . . . . . 159 ........................................................................................... 73. Обход интервала дат в цикле . 160 ................................................................................ До JDK 8 ............................................................................................................... 160 Начиная с JDK 8 ................................................................................................... 160 Начиная с JDK 9 ................................................................................................... 161 74. Вычисление возраста . . . . . . 161 .................................................................................. ...... ДoJDK8 . . . 161 ............................................................................................................ Начиная с JDK 8 . . . . . 161 .............................................................................................. 75. Начало и конец дня . . . 162 .............................................................................. ................ 76. Разница между двумя датами . 164 ............................................................................... До JDK 8 . . 164 ............................................................................................................. Начиная с JDK 8 ... . .. . . . 165 ............................................................ ..... .. ....................... 77. Имплементация шахматных часов . 166 ....................................................................... Резюме . . . .. . 171 ............................................................ ................................................................. Глава 4. Логический вывод типов"""""".". . """""". .." """"""""""""""""." .." """".172 Задачи 172 .................................................................................................................................... Решения . . . . . . . . 174 ......................................................................................................................... 78. Простой пример с использованием переменной типа var .. 174 ................................ 79. Использование типа var с примитивными типами . . 177 ............................................ 80. Использование типа var и неявного приведения типов для поддержания технической сопроводимости исходного кода .......................................................... 178 81. Явное понижающее приведение типов или как избегать типа var . . . 180 ................. 82. Как отказаться от типа var, если вызываемые имена не содержат для людей достаточной информации о типе . 180 ................................................................................ 83. Сочетание LVТI и программирования согласно интерфейсу. ............................ 182 84. Сочетание L VТI и ромбовидного оператора 183 ........................................................ 85. Присвоение массива переменной типа var 184 ........................................................... 86. Использование LVТI в составных объявлениях . . . 184 ............................................... 87. LVТI и область видимости переменной . . 185 ............................................................. [ 8 ] Оглавление 88. LVTI и тернарный оператор . . . . 186 .............................................................................. 89. LVTI и циклыfоr .................................................................................................... 187 90. LVTI и потоки .. . .. . 188 ............................................. ....... ............................................... 91. Использование LVТI для разбиения вложенных/крупных цепочек выражений . . 189 ................................................................................................................... 92. LV ТI и возвращаемый и аргументный типы метода .. . . 190 ....................................... 93. LVTI и анонимные классы . . .. . . . . 191 .... ......................................................................... 94. LVТI может быть финальным и практически финальным . 192 ................................ 95. LVTI лямбда-выражения . . 193 и .................................................................................. 96. LVТI и инициализаторы null, экземплярные переменные и переменные блоков catch . . . 194 ....................................................................................... Инструкция try с объявлением ресурса . . . 194 ........................................................... 97. LVТI и обобщенные типы Т . . . 195 ............................................................................... 98. LV ТI, подстановочные знаки, коварианты и контраварианты . . 196 ......................... LV TI и подстановочные знаки . . . 196 ......................................................................... LV ТI и коварианты/контраварианты . . . 197 .............................................................. Резюме . . . . . . 198 ............................................................................................................................. Глава 5. Массивы, коллекции и структуры данных ................................................... 199 Задачи 199 .................................................................................................................................... Решения . . . . 201 ............................................................................................................................. 99. Сортировка массива . . . . . . 201 ......................................................................................... Решения, встроенные в JDK . . . . . . 202 ......................................................................... Другие алгоритмы сортировки . 204 .......................................................................... 100. Поиск элемента в массиве . . 213 .................................................................................. Проверка только присутствия элемента . 214 ........................................................... Проверка только первого индекса .. . . 217 . ................................................................. 101. Проверка эквивалентности или несовпадения двух массивов . . . 218 ...................... Проверка эквивалентности двух массивов 218 ........................................................ Проверка несовпадения в двух массивах . . 220 ......................................................... 102. Сравнение двух массивов лексикографически .. . . . . 221 .. .......................................... 103. Создание потока из массива 223 ................................................................................ 104. Минимальное, максимальное и среднее значения массива . 224 ............................. Вычисление максимума и минимума . . . 225 .............................................................. Вычисление среднего значения . . . 227 ....................................................................... 105. Инвертирование массива . . 227 ................................................................................... 1 Об. Заполнение и настройка массива . . . . . . 229 .................................................................. 107. Следующий больший элемент . . . 231 .......................................................................... 108. Изменение размера массива . . . 232 ............................................................................. 109. Создание немодифицируемых/немутируемых коллекций . . 233 ............................. Задача 1 ( Collections.unmodifiaЫeList( )) ............................................................. 233 Задача 2 (Arrays.asList()) ..................................................................................... 234 Задача 3 (Collections.unmodifiaЬleList() и статический блок) 234 ........................... Задача 4 (List.of( )) ................................................................................................. 235 Задача 5 (немутируемое) ..................................................................................... 236 110. Возврат значения по умолчанию из коллекции Мар 238 ......................................... [ 9 ]

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.