Какие операции над collection допустимы
Перейти к содержимому

Какие операции над collection допустимы

  • автор:

Какие операции над collection допустимы

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

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(). Он возвращает итератор — то есть объект, реализующий интерфейс 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 и возвращает отрицательное значение если thisother . Для класса Byte данный метод реализуется следующим образом: public int compareTo(Byte anotherByte) < return this.value - anotherByte.value; >java.util.Comparator — содержит два метода: • int compare(T o1, T o2) — сравнение, аналогичное compareTo • boolean equals(Object obj) — true если оbj это Comparator и у него такой же принцип сравнения. Collections Collections — класс, состоящий из статических методов, осуществляющих различные служебные операции над коллекциями.

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
Подписано к печати
Заказ №
Тираж .
Отпечатано на ризографе

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *