Главная страница

Scala. Профессиональное программирование 2022. Одерски Мартин, Спун Лекс, Веннерс Билл, Соммерс ФрэнкО41 Scala. Профессиональное программирование. 5е изд спб. Питер, 2022. 608 с. ил. Серия Библиотека программиста


Скачать 6.24 Mb.
НазваниеОдерски Мартин, Спун Лекс, Веннерс Билл, Соммерс ФрэнкО41 Scala. Профессиональное программирование. 5е изд спб. Питер, 2022. 608 с. ил. Серия Библиотека программиста
Дата27.04.2023
Размер6.24 Mb.
Формат файлаpdf
Имя файлаScala. Профессиональное программирование 2022.pdf
ТипДокументы
#1094967
страница2 из 64
1   2   3   4   5   6   7   8   9   ...   64
Глава 11. Трейты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 11 .1 . Как работают трейты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 11 .2 . Сравнение «тонких» и «толстых» интерфейсов . . . . . . . . . . . . . . . 232 11 .3 . Трейты как наращиваемые модификации . . . . . . . . . . . . . . . . . . . . 235 11 .4 . Почему не используется множественное наследование . . . . . . . . . 239 11 .5 . Параметры трейтов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Глава 12. Пакеты, импорты и экспорты . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 12 .1 . Помещение кода в пакеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 12 .2 . Краткая форма доступа к родственному коду . . . . . . . . . . . . . . . . . 249 12 .3 . Импортирование кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 12 .4 . Неявное импортирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 12 .5 . Модификаторы доступа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Приватные члены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Защищенные члены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Публичные члены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Область защиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Видимость и объекты-компаньоны . . . . . . . . . . . . . . . . . . . . . . . 260 12 .6 . Определения верхнего уровня . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 12 .7 . Экспорты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Глава 13. Сопоставление с образцом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 13 .1 . Простой пример . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
case-классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Сопоставление с образцом . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Сравнение match со switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

12 Оглавление
13 .2 . Разновидности паттернов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Подстановочные паттерны . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Паттерны-константы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Патерны-переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Паттерны-конструкторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Паттерны-последовательности . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Паттерны-кортежи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Типизированные паттерны . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Затирание типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Привязка переменной . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 13 .3 . Ограждение образца . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 13 .4 . Наложение паттернов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 13 .5 . Запечатанные классы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 13 .6 . Сопоставление паттерна Options . . . . . . . . . . . . . . . . . . . . . . . . . . 285 13 .7 . Паттерны повсюду . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Паттерны в определениях переменных . . . . . . . . . . . . . . . . . . . 286
Последовательности вариантов в качестве частично примененных функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Паттерны в выражениях for . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 13 .8 . Большой пример . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Глава 14. Работа со списками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 14 .1 . Литералы списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 14 .2 . Тип List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 14 .3 . Создание списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 14 .4 . Основные операции над списками . . . . . . . . . . . . . . . . . . . . . . . . . 301 14 .5 . Паттерны-списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 14 .6 . Методы первого порядка класса List . . . . . . . . . . . . . . . . . . . . . . . . 304
Конкатенация двух списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Принцип «разделяй и властвуй» . . . . . . . . . . . . . . . . . . . . . . . . 305
Получение длины списка: length . . . . . . . . . . . . . . . . . . . . . . . . 307
Обращение к концу списка: init и last . . . . . . . . . . . . . . . . . . . . . 307
Реверсирование списков: reverse . . . . . . . . . . . . . . . . . . . . . . . . 308
Префиксы и суффиксы: drop, take и splitAt . . . . . . . . . . . . . . . . . 309
Выбор элемента: apply и indices . . . . . . . . . . . . . . . . . . . . . . . . . 310
Линеаризация списка списков: flatten . . . . . . . . . . . . . . . . . . . . . 310
Объединение списков: zip и unzip . . . . . . . . . . . . . . . . . . . . . . . . 311
Отображение списков: toString и mkString . . . . . . . . . . . . . . . . . 311

Оглавление 13
Преобразование списков: iterator, toArray, copyToArray . . . . . . . . 312
Пример: сортировка слиянием . . . . . . . . . . . . . . . . . . . . . . . . . . 313 14 .7 . Методы высшего порядка класса List . . . . . . . . . . . . . . . . . . . . . . . 315
Отображения списков: map, flatMap и foreach . . . . . . . . . . . . . . . 316
Фильтрация списков: filter, partition, find, takeWhile, dropWhile и span . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Применение предикатов к спискам: forall и exists . . . . . . . . . . . . 318
Свертка списков: foldLeft и foldRight . . . . . . . . . . . . . . . . . . . . . . 319
Пример: реверсирование списков с помощью свертки . . . . . . . . 321
Сортировка списков: sortWith . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 14 .8 . Методы объекта List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Создание списков из их элементов: List .apply . . . . . . . . . . . . . . . 323
Создание диапазона чисел: List .range . . . . . . . . . . . . . . . . . . . . . 323
Создание единообразных списков: List .fill . . . . . . . . . . . . . . . . . . 324
Табулирование функции: List .tabulate . . . . . . . . . . . . . . . . . . . . 324
Конкатенация нескольких списков: List .concat . . . . . . . . . . . . . . 324 14 .9 . Совместная обработка нескольких списков . . . . . . . . . . . . . . . . . . 325 14 .10 . Понимание имеющегося в Scala алгоритма вывода типов . . . . . . . 326
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Глава 15. Работа с другими коллекциями . . . . . . . . . . . . . . . . . . . . . . . . . 331 15 .1 . Последовательности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Буферы списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Буферы массивов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Строки (реализуемые через StringOps) . . . . . . . . . . . . . . . . . . . . 334 15 .2 . Множества и отображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Использование множеств . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Применение отображений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Множества и отображения, используемые по умолчанию . . . . . . 340
Отсортированные множества и отображения . . . . . . . . . . . . . . . 341 15 .3 . Выбор между изменяемыми или неизменяемыми коллекциями . . . . 342 15 .4 . Инициализация коллекций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Преобразование в массив или список . . . . . . . . . . . . . . . . . . . . . 346
Преобразования между изменяемыми и неизменяемыми множествами и отображениями . . . . . . . . . . . . . . . . . . . . . . . . . 347 15 .5 . Кортежи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

14 Оглавление
Глава 16. Изменяемые объекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 16 .1 . Что делает объект изменяемым . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 16 .2 . Переназначаемые переменные и свойства . . . . . . . . . . . . . . . . . . . 352 16 .3 . Практический пример: моделирование дискретных событий . . . . . . 356 16 .4 . Язык для цифровых схем . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 16 .5 . API моделирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 16 .6 . Моделирование электронной логической схемы . . . . . . . . . . . . . . . 364
Класс Wire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
Метод inverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Методы andGate и orGate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Вывод симуляции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
Запуск симулятора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Глава 17. Иерархия Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 17 .1 . Иерархия классов Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 17 .2 . Как реализованы примитивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 17 .3 . Низшие типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 17 .4 . Определение собственных классов значений . . . . . . . . . . . . . . . . . 379
Уход от монокультурности типов . . . . . . . . . . . . . . . . . . . . . . . . 380 17 .5 . Типы пересечений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 17 .6 . Типы объединения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 17 .7 . Прозрачные трейты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Глава 18. Параметризация типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 18 .1 . Функциональные очереди . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 18 .2 . Сокрытие информации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
Приватные конструкторы и фабричные методы . . . . . . . . . . . . . 392
Альтернативный вариант: приватные классы . . . . . . . . . . . . . . . 393 18 .3 . Аннотации вариантности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Вариантность и массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 18 .4 . Проверка аннотаций вариантности . . . . . . . . . . . . . . . . . . . . . . . . 399 18 .5 . Нижние ограничители . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 18 .6 . Контравариантность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 18 .7 . Верхние ограничители . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

Оглавление 15
Глава 19. Перечисления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 19 .1 . Перечисляемые типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 19 .2 . Алгебраические типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 19 .3 . Обобщенные ADT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 19 .4 . Что делает типы ADT алгебраическими . . . . . . . . . . . . . . . . . . . . . 417
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Глава 20. Абстрактные члены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 20 .1 . Краткий обзор абстрактных членов . . . . . . . . . . . . . . . . . . . . . . . . 421 20 .2 . Члены-типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 20 .3 . Абстрактные val-переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 20 .4 . Абстрактные var-переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 20 .5 . Инициализация абстрактных val-переменных . . . . . . . . . . . . . . . . . 425
Параметрические поля трейтов . . . . . . . . . . . . . . . . . . . . . . . . . 427
Ленивые val-переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 20 .6 . Абстрактные типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 20 .7 . Типы, зависящие от пути . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 20 .8 . Уточняющие типы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 20 .9 . Практический пример: работа с валютой . . . . . . . . . . . . . . . . . . . . 437
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Глава 21. Гивены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 21 .1 . Как это работает . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 21 .2 . Параметризованные given-типы . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 21 .3 . Анонимные given-экземпляры . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 21 .4 . Параметризованные given-экземпляры в виде классов типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 21 .5 . Импорт гивенов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 21 .6 . Правила для контекстных параметров . . . . . . . . . . . . . . . . . . . . . . 461 21 .7 . Когда подходит сразу несколько гивенов . . . . . . . . . . . . . . . . . . . . 463 21 .8 . Отладка гивенов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Глава 22. Методы расширения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 22 .1 . Основы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 22 .2 . Обобщенные расширения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 22 .3 . Групповые расширения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 22 .4 . Использование класса типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474

16 Оглавление
22 .5 . Методы расширения для заданных экземпляров . . . . . . . . . . . . . . . 477 22 .6 . Где Scala ищет методы расширения . . . . . . . . . . . . . . . . . . . . . . . . 480
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Глава 23. Классы типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 23 .1 . Зачем нужны классы типов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 23 .2 . Границы контекста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 23 .3 . Главные методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 23 .4 . Многостороннее равенство . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 23 .5 . Неявные преобразования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 23 .6 . Пример использования класса типов: сериализация JSON . . . . . . . 502
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
Глава 24. Углубленное изучение коллекций . . . . . . . . . . . . . . . . . . . . . . . . 511 24 .1 . Изменяемые и неизменяемые коллекции . . . . . . . . . . . . . . . . . . . . 513 24 .2 . Согласованность коллекций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 24 .3 . Трейт Iterable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Подкатегории Iterable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 24 .4 . Трейты последовательностей Seq, IndexedSeq и LinearSeq . . . . . . . 523
Буферы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528 24 .5 . Множества . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 24 .6 . Отображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 24 .7 . Конкретные классы неизменяемых коллекций . . . . . . . . . . . . . . . . 538
Списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
Ленивые списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
Неизменяемые ArraySeq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
Векторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
Неизменяемые очереди . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
Диапазоны . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Сжатые коллекции HAMT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Красно-черные деревья . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Неизменяемые битовые множества . . . . . . . . . . . . . . . . . . . . . . 544
Векторные отображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
Списочные отображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 24 .8 . Конкретные классы изменяемых коллекций . . . . . . . . . . . . . . . . . . 546
Буферы массивов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Буферы списков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Построители строк . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547

Оглавление 17
ArrayDeque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Очереди . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Стеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Изменяемые ArraySeq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Хеш-таблицы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Слабые хеш-отображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Совместно используемые отображения . . . . . . . . . . . . . . . . . . . 550
Изменяемые битовые множества . . . . . . . . . . . . . . . . . . . . . . . . 550 24 .9 . Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551 24 .10 . Строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 24 .11 . Характеристики производительности . . . . . . . . . . . . . . . . . . . . . . 556 24 .12 . Равенство . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 24 .13 . Представления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 24 .14 . Итераторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Буферизованные итераторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 24 .15 . Создание коллекций с нуля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 24 .16 . Преобразования между коллекциями Java и Scala . . . . . . . . . . . . . 573
Резюме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
1   2   3   4   5   6   7   8   9   ...   64


написать администратору сайта