Какие операции над collection допустимы
Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности
Public user contributions licensed under cc-wiki license with attribution required
Ответы на вопросы на собеседование Java Collections Framework (часть 1).
Коллекции — это хранилища или контейнеры, поддерживающие различные способы накопления и упорядочения объектов с целью обеспечения возможностей эффективного доступа к ним. Они представляют собой реализацию абстрактных структур данных, поддерживающих три основные операции:
добавление нового элемента в коллекцию;
- удаление элемента из коллекции;
- изменение элемента в коллекции.
- Назовите основные интерфейсы коллекций и их имплементации.
Сollection расширяет три интерфейса: List, Set, Queue.
List — хранит упорядоченные елементы(могут быть одинаковые); Имеет такие реализации как LinkedList, ArrayList и Vector.
- Vector синхронизирован, и по этому в одном потоке, он работает медленней остальных реализаций.
- ArrayList — его преимущество в навигации по коллекции.
- LinkedList — Его преимущество в во вставке и удалении элементов в коллекции.
Set — коллекции, которые не содержат повторяющихся элементов.
Основные реализации: HashSet, TreeSet, LinkedHashSet
- TreeSet — упорядочивает элементы по их значениям;
- HashSet — упорядочивает элементы по их хэш ключах, хотя на первый взляд может показаться что элементы хранятся в случайном порядке.
- LinkedHashSet — хранит элементы в порядке их добавления
Queue — интерфейс для реализации очереди в джава.
Основные реализации: LinkedList, PriorityQueue.
Очереди работают по принципу FIFO – first in first out.
Map — интерфейс для реализации так называемой карты, где элементы хранятся с их ключами.
Основные реализации: HashTable, HashMap, TreeMap, LinkedHashMap
- HashTable — синхронизированна, объявлена уставревшей.
- HashMap — порядок елементов рассчитывается по хэш ключу;
- TreeMap — элементы хранятся в отсортированном порядке
- LinkedHashMap — элементы хранятся в порядке вставки
Ключи в Мар не могут быть одинаковыми!
Синхронизировать не синхронизированные коллекции и карты можно посредством класса Collections.synchronizedMap(MyMap)\ synchronizedList(MyList).
- Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?
Отличие заключается в способе хранения данных. ArrayList хранит в виде массива, а LinkedList — в виде списка (двунаправленного).
В ArrayList быстрее происходит сортировка, т.к. для ее выполнения данные списка копируются в массив (а копировать из массива ArrayList в массив для сортировки быстрее). При большом числе операций добавления и удаления LinkedList должен быть более удачным выбором, т.к. при этих операциях не приходится перемещать части массива.
Если при добавлении в ArrayList превышается его объем, размер массива увеличивается, новая емкость рассчитывается по формуле (oldCapacity * 3) / 2 + 1, поэтому лучше указывать размер при создании или, если он не известен, использовать LinkedList (но это может быть существенно при слишком уж больших объемах данных).
- Чем отличается HashMap от Hashtable?
Класс HashMap по функционалу очень похож на Hashtable. Главное отличие в том, что методы класса Hashtable синхронизированы, а HashMap — нет. Кроме этого класс HashMap в отличии от Hashtable разрешает использование null в качестве ключей и значений.
Наличие синхронизации в Hashtable уменьшает производительность кода, использующего данный класс. Поэтому классы JCF (Java Collections Framework, появившийся в Java 2), в том числе и HashMap, несинхронизированы. Если синхронизация все же нужна, можно использовать методы класса Collections: Collections.synchronizedMap(map), Collections.synchronizedList(list) или Collections.synchronizedSet(set).
Данные методы возвращают синхронизированный декоратор переданной коллекции. При этом все равно в случае итерирования по коллекции требуется ручная синхронизация.
Начиная с Java 6 JCF был расширен специальными коллекциями, поддерживающими многопоточный доступ, такими как CopyOnWriteArrayList и ConcurrentHashMap.
- Чем отличается ArrayList от Vector?
Методы класса Vector синхронизированы, в то время как ArrayList — нет.
- Как сравниваются елементы коллекций?
Для сравнения элементов коллекций используется метод equals() и hashcode();Эти методы унаследованы от класса Object.
- Если наш пользовательский класс переопределяет equals(), то он должен и переопределить hashcode()
- Если два объекта эквивалентны, то и хэш коды этих объектов тоже должны быть равны
- Если поле не используется в equals(), то оно и не должно использоваться в hashcode().
- Расположите в виде иерархии следующие интерфейсы: List, Set, Map, SortedSet, SortedMap, Collection,Iterable, Iterator, NavigableSet, NavigableMap.
- Почему Map — это не Collection, в то время как List и Set являются Collection?
Коллекция (List и Set) представляет собой совокупность некоторых элементов (обычно экземпляров одного класса).Map -это совокупность пар «ключ»-«значение».
Соответственно некоторые методы интерфейса Collection нельзя использовать в Map. Например, метод remove(Object o) в интерфейсе Collection предназначен для удаления элемента, тогда как такой же метод remove(Object key) в интерфейсе Map — удаляет элемент по заданному ключу.
- Дайте определение понятию «iterator».
Итератор — объект, позволяющий перебирать элементы коллекции. Например foreach реализован с использованием итератора. Одним из ключевых методов интерфейса Collection является метод Iterator
Интерфейс Iterator имеет следующее определение:
- Что вы знаете об интерфейсе Iterable?
Все коллекции из java.util реализуют интерфейс Collection, который, в свою очередь, расширяет интерфейс Iterable. В интерфейсе Iterable описан только один метод:
Iterator iterator();
Он возвращает Iterator, т.е. объект, который поочерёдно возвращает все элементы коллекции.
- Как одной строчкой преобразовать HashSet в ArrayList?
Коллекции в Java: о чём многие забывают
Из опыта code-review и ответов на StackOverflow набралось немало моментов, касающихся Java Collections API, которые мне казались очевидными, но другие разработчики о них почему-то не знали или знали, но не чувствовали уверенности их применять. В этой статье я собираю в общую кучу всё, что накопилось.
List.subList
Про это уже писали, но стоит повторить. Наверно, самый недооценённый метод из Collections API. Бывает, что надо каким-то образом обработать часть списка (например, в алгоритмах семейства «разделяй и властвуй» или при распараллеливании задачи). Многие создают метод или класс, который завязывается на три параметра: List, from и to:
void processListPart(List list, int from, int to) < for(int idx = from; idx < to; idx++) < Item item = list.get(idx); . >>
Так незачем делать. Реализации алгоритма должно быть плевать, что она обрабатывает часть списка. Пишите:
void processList(List list) < for(Item item : list) < . >>
processList(list.subList(from, to));
Даже если у вас всё в одном методе, удобнее воспользоваться расширенным циклом for, чем возиться с индексами:
for(Item item : list.subList(from, to))
Кроме того, subList — полнофункциональный список, он работает и на запись, внося соответствующие изменения в родительский список. Нужно удалить много элементов из середины списка? Ничего нет проще:
list.subList(from, to).clear();
У популярных реализаций вроде ArrayList это выполняется очень быстро.
Надо выяснить, начинается ли список с определённых элементов? И тут subList в руки!
List prefix = Arrays.asList("a", "prefix", "values"); if(myList.size() >= prefix.size() && myList.subList(0, prefix.size()).equals(prefix))
Надо добавить в один список все элементы другого списка за исключением первого? И тут subList придёт на помощь:
list1.addAll(list2.subList(1, list2.size()));
Не забывайте, что можно писать Arrays.asList(array).subList(from, to) , поэтому вышесказанное применимо и для непримитивных массивов. Структурно менять вы их не сможете, но передавать кусок массива в метод, принимающий список для чтения — легко.
PriorityQueue
Если subList — самый недооценённый метод, то PriorityQueue — это, на мой взгляд, самый недооценённый класс. Многие сталкиваются с задачей отыскать, скажем, 10 минимальных значений большого несортированного списка. Чаще всего список сортируют и потом берут первые 10 значений. Если исходный список менять нельзя, придётся его ещё скопировать для сортировки. А ведь очередь с приоритетом легко справится с этой задачей:
public static > List leastN(Collection input, int n) < assert n >0; PriorityQueue pq = new PriorityQueue<>(Collections.reverseOrder()); for (T t : input) < if (pq.size() < n) < pq.add(t); >else if (pq.peek().compareTo(t) > 0) < pq.poll(); pq.add(t); >> List list = new ArrayList<>(pq); Collections.sort(list); return list; >
Такой код в зависимости от данных может работать гораздо быстрее, чем сортировка. Например, для n = 10 и случайно заполненного списка из миллиона элементов очередь с приоритетом почти в сто раз обгоняет подход с сортировкой. При этом дополнительной памяти требуется O(n) и входные элементы можно обрабатывать в потоковом режиме (например, выбрать 10 наименьших чисел из входного файла).
Вообще людям свойственно изучить пару-тройку структур данных и пользоваться ими везде. Не ленитесь, познакомьтесь с разными структурами.
EnumSet и EnumMap
До сих пор встречается код, где значения типа enum используют в качестве ключей в HashSet и HashMap. Хотя это работает, но оно неоправданно расточительно. Существующие специальные классы EnumSet и EnumMap значительно производительнее. Так если в enum не больше 64 разных значений, EnumSet хранит всё в одном поле типа long в битовой маске. EnumMap содержит все значения в обычном массиве той же длины, сколько элементов в enum, а ключи не хранит вовсе. Так как у каждого значения в enum есть порядковый номер ordinal(), можно легко перейти от enum-ключа к элементу массива. Также никогда не нужно менять размер массива.
Set.add(E) и Set.remove(E) возвращают булево значение
Часто вижу подобный код:
if(!set.contains(item)) < set.add(item); // do something >else < // do something else >
Не надо забывать, что операция добавления в Set возвращает true, если добавление успешно (то есть элемента не было) и false, если такой элемент уже был. Незачем усложнять код и два раза пробивать элемент по хэш-таблице или двоичному дереву, ведь можно написать:
if(set.add(item)) < // do something >else < // do something else >
Аналогично с удалением. Цепочка if(set.contains(item)) < set.remove(item); . >заменяется на if(set.remove(item)) < . >.
Map.put(K, V), Map.remove(K), List.set(idx, E), List.remove(idx) возвращают предыдущий элемент
Из той же оперы ситуация. Методы, изменяющие или удаляющие элемент в коллекции возвращают предыдущее значение, и этим надо пользоваться. Не надо писать, например, так:
Item item = myMap.get(key); myMap.put(key, newItem);
Написать просто Item item = myMap.put(key, newItem); . Хотите поменять местами две записи в Map с ключами key1, key2? Временная переменная не нужна:
myMap.put(key1, myMap.put(key2, myMap.get(key1)));
Map.keySet() и Map.values()
Многие почему-то забывают, что Map.keySet() и Map.values() возвращают отображения исходного Map, которые позволяют удалять элементы (если Map модифицируемый). Надо оставить в Map только записи с определёнными значениями (и любыми ключами)? Пожалуйста:
myMap.values().retainAll(toRetain);
Также работает removeAll , а с Java-8 ещё и removeIf :
// Сгруппируем сотрудников по названиям подразделений Map> perDepartment = employees.stream().collect(groupingBy(Employee::getDepartmentName, HashMap::new, toList())); // Оставим только крупные подразделения с числом сотрудников от 10 perDepartment.values().removeIf(list -> list.size() < 10);
Arrays.asList может быть ключом
Бывает, что вам нужно сформировать Map или Set, используя кортеж значений. Например, у вас есть PoJo-объекты Item , у которых имеются поля name, type, version . У них уже написан equals и hashCode , их можно складывать в HashSet , всё нормально. Но вы хотите выбрать из коллекции уникальные объекты только по полям name и type , игнорируя version. Менять существующие equals и hashCode нельзя. В таких ситуациях люди часто создают отдельный класс только с полями name и type и используют его в качестве ключа. Однако для одноразовой операции проще использовать Arrays.asList() :
Map, Item> map = new HashMap<>(); for(Item item : items) < map.put(Arrays.asList(item.name, item.type), item); >Collection unique = map.values();
Arrays.asList() создаёт список из нужного числа элементов и у него как раз подходящие реализации equals и hashCode : никакой boilerplate не нужен. Так можно создать ключ любой длины, причём корректно обработаются null-значения и примитивы (брагодаря боксингу). Не сработает только, если вы хотите в составе ключа иметь массив.
Collections.min/max
Удивительно, насколько часто можно встретить написанный вручную код, который находит максимальный или минимальный элемент чего-то по какому-нибудь критерию. Казалось бы, такая тривиальная задача должна быть давно решена. На самом деле она и так давно решена: есть методы Collections.min и Collections.max . Раньше было не очень удобно писать компараторы, но в Java-8 всё стало легче.
К примеру, вам нужно найти ключ в Map, соответствующий максимальному значению. Пишите так:
maxKey = Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey();
Можно и через Stream API, но Collections.max() несколько быстрее. Если вы не можете использовать Java-8 и компараторы вроде Entry.comparingByValue() вам недоступны, их нетрудно написать.
Stack, Vector, Hashtable, LinkedList
Просто не используйте эти классы. Пользы от них никакой нет. Вместо Stack пользуйтесь ArrayDeque, вместо Vector — ArrayList, вместо Hashtable — HashMap. Если вам нужна потокобезопасность, они вам всё равно не помогут. Возможно, в девятке их всё-таки пометят @Deprecated (смотрите JEP 277).
С LinkedList случай особый. Вроде бы лучшего аналога связного списка нет и ходят легенды, что он на самом деле полезен. В действительности ситуаций, когда LinkedList лучше, чем ArrayList, в реальной жизни исключительно мало. До Java-8 LinkedList ещё мог пригодиться, если вы часто удаляете элементы, идущие не последовательно, по какому-то условию. В Java-8 для этих целей появился List.removeIf , который в ArrayList, конечно, реализован оптимальнее (элементы передвигаются только один раз). Если вам надо сделать много вставок в разные места (задача сама по себе экзотическая), скорее всего быстрее будет создать новый ArrayList, чем вставлять в существующий LinkedList. Ну и помните, что LinkedList кушает в несколько раз больше памяти, так как каждый элемент — это отдельный объект в куче со ссылками на следующий и предыдущий. LinkedList можно использовать только в качестве учебного примера.
На сегодня всё. Программируйте с удовольствием!
Методичка по JAVA
Только сегодня: скидка до 20% в подарок на первый заказ.
Какую работу нужно написать?
Другую работу
Помощник Анна
Wildcard Wildcard (дословно джокер) или групповая подстановка – синтаксические конструкции с использованием символа '?' (означает любой тип ), используемые для замены в шаблонах конкретного класса множеством возможных классов. Групповая подстановка обычно используется для создания шаблонных классов: /* * Допустимые параметры: * Square s (Square extends Shape) — можно * String str — нельзя */ static void drawAll(Collection c) < for(Shape s : c) < s.draw(); >> Коллекции Коллекции – это классы для сохранения, получения, манипулирования данными над множеством объектов. Иерархия коллекций представлена на рис. 23. Iterator Iterator – интерфейс, позволяющий выполнять обход элементов коллекции с возможностью их удаления. Является переработкой и развитием интерфейса Enumeration .
boolean hasNext(); | Возвращает true если в коллекции есть еще эле- |
менты. | |
E next(); | Следующий элемент. |
void remove(); | Удалить элемент. |
Использование Iterator вместо Enumeration является предпочтительным из-за более короткого описания методов и появившейся операции remove. Класс ListIterator осуществляет двунаправленное перемещение по коллекции.?>
java.lang.Interable | Collections | Iterator | ListIterator |
Collection | AbstractCollection | AbstractSequentialList | LinkedList |
ArrayList | |||
List | AbstractList | Vector | Stack |
Set | AbstractSet | EnumSet | |
HashSet | LinkedHashSet | ||
SortedSet | |||
TreeSet | |||
NavigableSet | |||
Queue | AbstractQueue | PriorityQueue | |
Deque | ArrayDeque |
Abstract Map | |||||||
IdentityHashMap | |||||||
Abstract Map. | |||||||
Map | WeakHashMap | ||||||
SimpleEntry | |||||||
Map.Entry | |||||||
Enum Map | |||||||
Abstract Map.Simpl | |||||||
eImmutableEntry | |||||||
K,V> | Hash Map | LinkedHashSet | |||||
Sorted Map | |||||||
Tree Map | |||||||
Navigable Map |
Рисунок 23. Иерархия коллекций.
Collection Collection – интерфейс, описывающий набор каких-либо элементов. Способ организации элементов определяется реализующими Collection классами и интерфейсами.
int size() | Возвращает размер коллекции. |
boolean isEmpty() | Возвращает true , если в коллекции нет |
элементов. | |
boolean contains(Object | Возвращает true , если коллекция содер- |
o) | жит элемент. |
Iterator iterator(); | Возвращает Iterator . |
Object[] toArray(); | Преобразует коллекцию в массив объектов. |
T[] toArray(T[] a); | Преобразует в коллекцию в массив типа T , |
размещая в массиве a . | |
boolean add(E e); | Добавляет элемент в коллекцию. Возвра- |
щает true , если элемент добавлен; false | |
— если коллекция запрещает дубликаты | |
элементов и элемент не уникален. | |
boolean remove(Object o); | Удаляет один элемент (даже если таких |
несколько). Возвращает true , если эле- | |
мент удален. | |
boolean | Возвращает true , если коллекция содер- |
containsAll(Collection | жит все элементы заданной коллекции. |
c); | Добавляет элементы в коллекцию. Возвра- |
boolean addAll | |
(Collection | щает true , если коллекция изменена в ре- |
c); | зультате операции. |
boolean removeAll | Удаляет все элементы, заданные в коллек- |
(Collection c); | ции с . |
boolean retainAll | Удаляет из коллекции все элементы, кроме |
(Collection c); | тех, которые заданы в коллекции с . |
void clear(); | Удаляет из коллекции все элементы. |
boolean equals(Object o); | Проверяет коллекцию на равенство другой |
коллекции | |
int hashCode(); | Возвращает хеш-код коллекции. |
В потомках интерфейса Collection допускается реализация не всех методов. В таком случае необходимо генерировать исключительную ситуацию UnsupportedOperationException . Любая коллекция должна возвращать итератор, и соответственно, позволять обходить свои элементы.
Интерфейсы коллекций
Set | Множество. Элементы уникальны и, возможно, отсортированы. |
List | Cортированная последовательность элементов, с возможностью |
дублирования и позиционного доступа. | |
Queue | Очередь, предназначенная для размещения элемента перед его |
обработкой. Расширяет коллекцию методами для вставки, вы- | |
борки и просмотра элементов. | |
Deque | Двунаправленная очередь, позволяющая вставку и удаление в |
два конца очереди. | |
Map | Карта это соответствие ключ — значение. Каждому ключу соот- |
ветствует одно значение. | |
SortedSet | Множество, элементы которого автоматически сортируются |
либо в их натуральном порядке (интерфейс Comparable ), либо | |
с использованием Comparator . | |
SortedMap | Автоматически сортированная карта (см. SortedSet ) |
Navigable | SortedSet , расширенный методами кратчайшего доступа к ис- |
Set | комому элементу. В NavigableSet элементы могут быть до- |
ступны в порядке увеличения и уменьшения | |
Navigable | SortedMap , расширенный методами кратчайшего доступа к ис- |
Map | комому элементу |
В пакете java.util.concurrent доступны дополнительные интерфейсы BlockingQueue , BlockingDeque (ограниченное число элементов и ожидание освобождения места), ConcurrentMap , ConcurrentNavigableMap (атомарные операции вставки, удаления, замены). Для уменьшения трудоемкости реализации существуют общие интерфейсы реализации коллекций - AbstractCollection , AbstractMap и др. представ- ляющие тривиальную реализацию основных методов коллекций. Коллекции общего назначения
HashSet | Реализация множества с использованием хеш-таблиц, об- |
ладающая самым высоким быстродействием | |
TreeSet | Реализация NavigableSet интрефейса с использованием |
раскрашеных деревьев | |
LinkedHashSet | Реализация множества в виде хеш таблицы и дву-связанно- |
го списка с заданным порядком элементов | |
ArrayList | Массив переменного размера. Является потоко-небезопас- |
ным Vector . Наиболее высокое быстродействие | |
ArrayDeque | Эффективная реализация интерфейса Deque переменного |
размера | |
LinkedList | Двусвязная реализация интерфейса List . Быстрее |
ArrayList , если элементы часто добавляются и удаляют- | |
ся. В дополнение реализует интерфейс Deque | |
PriorityQueue | Реализация очереди с приоритетами |
HashMap | Реализация интерфейса Map с использованием хеш таблиц |
TreeMap | Реализация NavigableMap интрефейса с использованием |
раскрашеных деревьев | |
LinkedHashMap | Реализация карты в виде хеш таблицы и дву-связанного |
списка с заданным порядком элементов |
В дополнение к общим реализациям, существуют прародители коллекций - классы Vector и Hashtable , реализация которых была обновлена с использо- ванием шаблонов. Специальные коллекции
WeakHashMap | Карта, сохраняющие слабые ссылки на ключи. Позво- |
ляет сборщику мусора уничтожить пару ключ-значе- | |
ние, когда на на ключ более нет внешних ссылок | |
IdentityHashMap | Реализация интерфейса Map с использованием хеш та- |
блицы и сравнением объекта на равенстов по ссылке | |
( key1==key2 ), вместо сравнения по значению | |
( key1.equials(key2) ). | |
CopyOnWriteArray | Реализация List, в которой операции - мутаторы ( add, |
List | set, remove ) реализуются путем создания новой ко- |
пии List . В результате нет необходимости в синхро- | |
низации. | |
CopyOnWriteArray | Реализация Set c созданием новой копии по операции |
Set | изменения (см. CopyOnWriteArrayList ) |
EnumSet | Высокопроизводительная реализация множества с ис- |
пользованием битового вектора. Все элементы должны | |
быть элементами одного Enum | |
EnumMap | Высокопроизводительная реализация карты с исполь- |
зованием битового вектора. Все ключи должны быть | |
элементами одного Enum |
Пакета java.util.concurrent дополняет реализации коллекций классами ConcurrentLinkedQueue, LinkedBlockingQueue, ArrayBlockingQueue, PriorityBlockingQueue, DelayQueue, SynchronousQueue, LinkedBlockingDeque, ConcurrentHashMap, ConcurrentSkipListSet, ConcurrentSkipListMap, которые подготовле- ны для использования в многопоточных программах и реализуют различную дополнительную функциональность. Сортировка элементов коллекции Сортировка элементов коллекции в интерфейсе SortedMap и аналогичных производится при помощи естественного порядка сортировки, определяемого в элементе коллекции, либо при помощи интерфейса Comparator . Естественный порядок сортировки (natural sort order) — естественный и реализованный по умолчанию (реализацией метода compareTo интерфейса java.lang.Comparable ) способ сравнения двух экземпляров одного класса. int compareTo(E other) — сравнивает this объект с other и возвращает отрицательное значение если this
sort(List) | Cортировать список, используя merge sort алго- |
ритм, с гарантированной скоростью O (n*log n). | |
binarySearch(List, | Бинарный поиск элементов в списке. |
Object) | Изменить порядок элементов в списке на противо- | |
reverse(List) | ||
положный. | ||
shuffle(List) | Случайно перемешать элементы. | |
fill(List, Object) | Заменить каждый элемент заданным. | |
copy(List dest, List | Скопировать список src в dst . | |
src) | Вернуть минимальный элемент коллекции. | |
min(Collection) | ||
max(Collection) | Вернуть максимальный элемент коллекции. | |
rotate(List list, | Циклически повернуть список на указанное число | |
int distance) | элементов. | |
replaceAll(List | Заменить все объекты на указанные. | |
list, Object oldVal, | ||
Object newVal) | Вернуть индекс первого подсписка source , кото- | |
indexOfSubList(List | ||
source, List target) | рый эквивалентен target . | |
lastIndexOfSubList(L | Вернуть индекс последнего подсписка source , | |
ist source, List | который эквивалентен target . | |
target) | Заменить элементы в указанных позициях списка. | |
swap(List, int, int) | ||
unmodifiableCollecti | Создает неизменяемую копию коллекции. Суще- | |
on (Сollection) | ствуют отдельные методы для Set , List , Map , и | |
т.д. | ||
synchronizedCollecti | Создает потоко-безопасную копию коллекции. | |
on (Collection) | Существуют отдельные методы для Set, List, | |
Map, и т.д. | ||
checkedCollection | Создает типо-безопасную копию коллекции, | |
(Collection c, | предотвращая появление неразрешенных типов в | |
Class type) | коллекции. Существуют отдельные методы для | |
Set , List , Map , и т.д. | ||
Set | Создает | неизменяемый Set , содержащую только |
singleton(T o); | заданный объект. Существуют методы для List | |
и Маp . | ||
List | Создает | неизменяемый List , содержащий n ко- |
nCopies(int n, T o) | пий заданного объекта. | |
frequency(Collection | Подсчитать количество элементов в коллекции. | |
, Object) | Вернуть | Comparator , которые предполагает |
reverseOrder() |
обратный порядок сортировки элементов. | |
list(Enumeration | Вернуть Enumeration в виде ArrayList . |
e) | Определить, что коллекции не содержат общих |
disjoint(Collection, | |
Collection) | элементов. |
addAll(Collection | Добавить все элементы из массива в коллекцию. |
super T>, T[]) | Создать Sеt из Map . |
newSetFromMap(Map) | |
asLifoQueue(Deque) | Создать Last in first out Queut представление из |
Deque . |
В 2009 году Университет стал победителем многоэтапного конкурса, в результате которого определены 12 ведущих университетов России, которым присвоена категория «Национальный исследовательский университет». Министерством образования и науки Российской Федерации была утверждена Программа развития государственного образовательного учреждения высшего профессионального образования «Санкт-Петербургский государственный университет информационных технологий, механики и оптики» на 2009–2018 годы. КАФЕДРА ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ Кафедра Вычислительной техники СПбГУ ИТМО создана в 1937 году и является одной из старейших и авторитетнейших научно-педагогических школ России. Первоначально кафедра называлась кафедрой математических и счетно-решаю- щих приборов и устройств и занималась разработкой электромеханических вычислительных устройств и приборов управления. Свое нынешнее название кафедра получила в 1963 году. Кафедра вычислительной техники является одной из крупнейших в университете, на которой работают высококвалифицированные специалисты, в том числе 8 профессоров и 15 доцентов, обучающие около 500 студентов и 30 аспирантов.
Гаврилов Антон Валерьевич Клименков Сергей Викторович Цопа Евгений Алексеевич Программирование на Java Конспект лекций В авторской редакции Редакционно-издательский отдел Санкт-Петербургского государственного уни- верситета информационных технологий, механики и оптики
Зав. РИО | Н.Ф. Гусарова |
Лицензия ИД № 00408 от 05.11.99 | |
Подписано к печати | |
Заказ № | |
Тираж . | |
Отпечатано на ризографе |