Брюс Эккель - Философия Java3

Тут можно читать онлайн Брюс Эккель - Философия Java3 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Брюс Эккель - Философия Java3 краткое содержание

Философия Java3 - описание и краткое содержание, автор Брюс Эккель, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Философия Java3 - читать онлайн бесплатно полную версию (весь текст целиком)

Философия Java3 - читать книгу онлайн бесплатно, автор Брюс Эккель
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

//: hoiding/AsListInference.java // Arrays.asListO makes its best guess about type, import java.util.*;

class Snow {}

class Powder extends Snow {} class Light extends Powder {} class Heavy extends Powder {} class Crusty extends Snow {} class Slush extends Snow {}

public class AsListInference {

public static void main(String[] args) { List snowl = Arrays.asList(

new CrustyO. new SlushO. new PowderO);

// He компилируется-// List snow2 = Arrays.asList( // new LightO. new HeavyO); // Сообщение компилятора: //found java.util.List // required, java util List

II Collections.addAllО работает нормально:

List snow3 = new ArrayList():

Col 1 ecti ons. addAl 1 (snow3, new LightO. new HeavyO);

II Передача информации посредством уточнения // типа аргумента

List snow4 = Arrays asList( new LightO, new HeavyO),

}

} ///:-

При попытке создания snow2, Arrays.asList() создает List вместо List , тогда как Collections.addAll() работает нормально, потому что целевой тип определяется первым аргументом. Как видно из создания snow4, в вызов Arrays.asList() можно вставить «подсказку», которая сообщает компилятору фактический тип объекта List, производимого Arrays.asList().

С контейнерами Map дело обстоит сложнее, и стандартная библиотека Java не предоставляет средств их автоматической инициализации, кроме как по содержимому другого объекта Map.

Вывод содержимого контейнеров

Для получения печатного представления массива необходимо использовать метод Arrays.toString, но контейнеры отлично выводятся и без посторонней помощи. Следующий пример демонстрирует использование основных типов контейнеров:

II: ell:Printi ngContai ners.java II Вывод контейнеров по умолчанию import java.util.*;

import static net.mindview.util.Print.*;

public class PrintingContainers {

static Collection fill(Collection collection) { collection. addC'rat"): collection.addC'cat"); collection.adde'dog"): col lection.add("dog"); return collection;

}

static Map fill(Map map) {

map. put ("rat", "Fuzzy"); продолжение &

map.put("cat". "Rags"), тар.put("dog". "Bosco"); map.put("dog", "Spot"); return map;

}

public static void main(String[] args) {

pri nt(fi11(new ArrayLi st())); print(fill(new LinkedList())); pri nt(fi11(new HashSet())); pri nt(fi11(new TreeSet())); pri nt(fi11(new Li nkedHashSet())); pri nt(fi11(new HashMap())); print(fill(new TreeMap())); print(fi11(new LinkedHashMap()));

}

} /* Output: [rat, cat, dog, dog] [rat, cat. dog, dog] [dog, cat, rat] [cat, dog, rat] [rat. cat. dog]

{dog=Spot. cat=Rags, rat=Fuzzy} {cat=Rags, dog=Spot, rat=Fuzzy} {rat=Fuzzy, cat=Rags, dog=Spot} *///:-

Как уже было упомянуто, в библиотеке контейнеров Java существует две основные категории, различающиеся прежде всего тем, сколько в одной ячейке контейнера «помещается» элементов. Коллекции (Collection) содержат только один элемент в каждой ячейке. К этой категории относятся список (List), где в определенной последовательности хранится группа элементов, множество (Set), в которое можно добавлять только по одному элементу определенного типа, и очередь (Queue). В контейнерах Map (карта) хранятся два объекта: ключ и связанное с ним значение.

Из выходных данных программы видно, что вывод по умолчанию (обеспечиваемый методом toStringO каждого контейнера) дает вполне приличные результаты. Содержимое Collection выводится в квадратных скобках, с разделением элементов запятыми. Содержимое Map заключается в фигурные скобки, ключи и значения разделяются знаком равенства (ключи слева, значения справа).

Контейнеры ArrayList и LinkedList принадлежат к семейству List, и из выходных данных видно, что элементы в них хранятся в порядке вставки. Они различаются не только скоростью выполнения тех или иных операций, но и тем, что LinkedList содержит больше операций, чем ArrayList.

HashSet, TreeSet и LinkedHashSet относятся к семейству Set. Из выходных данных видно, что в множествах Set каждый элемент хранится только в одном экземпляре, а разные реализации Set используют разный порядок хранения элементов. В HashSet порядок элементов определяется по довольно сложному алгоритму — пока достаточно знать, что этот алгоритм обеспечивает минимальное время выборки элементов, но порядок следования элементов на первый взгляд выглядит хаотично. Если порядок хранения для вас важен, используйте контейнер TreeSet, в котором объекты хранятся отсортированными по возрастанию в порядке сравнения, или LinkedHashSet с хранением элементов в порядке добавления.

Карта (Map) позволяет искать объекты по ключу , как несложная база данных. Объект, ассоциированный с ключом, называется значением . (Карты также называют ассоциативными массивами.)

В нашем примере используются три основные разновидности Map: HashMap, TreeMap и LinkedHashMap. Как и HashSet, HashMap обеспечивает максимальную скорость выборки, а порядок хранения его элементов не очевиден. TreeMap хранит ключи отсортированными по возрастанию, a LinkedHashMap хранит ключи в порядке вставки, но обеспечивает скорость поиска HashMap.

List

Контейнеры List гарантируют определенный порядок следования элементов. Интерфейс List дополняет Collection несколькими методами, обеспечивающими вставку и удаление элементов в середине списка. Существует две основные разновидности List:

• Базовый контейнер ArrayList, оптимизированный для произвольного доступа к элементам, но с относительно медленнными операциями вставки (удаления) элементов в середине списка.

• Контейнер LinkedList, оптимизированный для последовательного доступа, с быстрыми операциями вставки (удаления) в середине списка ;Произвольный доступ к элементам LinkedList выполняется относительно медленно, но по широте возможностей он превосходит ArrayList.

В следующем примере используется библиотека typenfo.pets из главы «Информация о типе». Она содержит иерархию классов домашних животных Pet, а также ряд вспомогательных средств для случайного построения объектов Pet. Пока достаточно знать, что (1) библиотека содержит класс Pet и производные типы, и (2) статический метод Pets.arrayList() возвращает контейнер ArrayList, заполненный случайно выбранными объектами Pet.

//• hoi ding/ListFeatures.java import typeinfo.pets.*; import java.util.*;

import static net mindview util.Print.*:

public class ListFeatures {

public static void main(String[] args) { Random rand = new Random(47); List pets = Pets.arrayList(7); printC'l: " + pets); Hamster h = new HamsterO; pets.add(h); // Автоматическое изменение размера print("2: " + pets); print("3: " + pets.contains(h)); pets.remove(h); // Удаление объекта

Pet p = pets.get(2); продолжение &

print("4: " + р + " " + pets.indexOf(p));

Pet cymric = new CymricO;

print("5: " + pets.indexOf(cymric));

print("6: " + pets.remove(cymric));

// Точно заданный объект:

print("7: " + pets.remove(p));

print("8: " + pets);

pets.add(3. new MouseO); // Вставка no индексу

print("9: " + pets);

List sub = pets.subListd, 4);

printC'subList: " + sub);

print("10: " + pets.containsAll(sub));

Col lections.sort(sub); // Сортировка "на месте"

print("sorted subList: " + sub);

// Для containsAllО порядок неважен:

printC'll: " + pets.containsAll(sub));

Col 1ections.shuffle(sub. rand); // Случайная перестановка

print("shuffled subList: " + sub).

print("12: " + pets.containsAll(sub));

List copy = new ArrayList(pets);

sub = Arrays.asList(pets.getd). pets.get(4));

printC'sub: " + sub);

copy.retainAll(sub);

print("13: " + copy);

copy = new ArrayList(pets); // Получение новой копии copy remove(2); // Удаление по индексу print("14: " + copy);

copy.removeAll(sub); // Удаление заданных элементов print("15: " + copy);

copy.setd, new MouseO); // Замена элемента print("16: " + copy);

copy.addAll(2. sub); // Вставка в середину списка

pri nt("17: " + copy);

print("18: " + pets.isEmptyO);

pets.clearO; // Удаление всех элементов

print("19: " + pets);

print("20: " + pets isEmptyO);

pets.addAll(Pets.arrayList(4));

print("21: " + pets);

Object[] о = pets.toArrayO;

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Брюс Эккель читать все книги автора по порядку

Брюс Эккель - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Философия Java3 отзывы


Отзывы читателей о книге Философия Java3, автор: Брюс Эккель. Читайте комментарии и мнения людей о произведении.


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

Напишите свой комментарий
x