Практическое программирование на Java к.ф.-м.н. Козлов Дмитрий Дмитриевич Кафедра АСВК, Лаборатория Вычислительных комплексов
Лекция 3. Библиотеки Java. Работа с коллекциями
Библиотека java.util Коллекции (контейнеры) – объекты, которые группируют другие объекты. Примеры коллекций: –Список –Стек –Хэш-таблица Библиотека коллекций (collections framework) предоставляет набор взаимосвязанных интерфейсов, реализаций и алгоритмов для работы с коллекциями.
Зачем нужна библиотека java.util Снижение количества кода, которое должен написать программист. Не задумываемся о низкоуровневых деталях. Повышение скорости создания программ и качества программ. Стандартизация API коллекций. Легкость освоения API программистом легкость создания новых API. Стандартный API коллекций – основа для повторного использования вновь создаваемых компонент
Иерархия классов
Интерфейс Collection public interface Collection extends Iterable { // Основные операции int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); //опционально boolean remove(Object element); // опционально Iterator iterator(); // Множественные операции boolean containsAll(Collection c); boolean addAll(Collection c); // опционально boolean removeAll(Collection c); // опционально boolean retainAll(Collection c); // опционально void clear(); // опционально // Операции с массивами Object[] toArray(); T[] toArray(T[] a); }
Навигация по коллекции Итератор по коллекции: public interface Iterator { boolean hasNext(); E next(); void remove(); //опционально } Использование итератора: static void filter(Collection c) { for (Iterator it = c.iterator(); it.hasNext(); ) if (!cond(it.next())) it.remove(); }
Интерфейс Map public interface Map { // Основные операции V put(K key, V value); V get(Object key); V remove(Object key); boolean containsKey(Object key); boolean containsValue(Object value); int size(); boolean isEmpty(); // Множественные операции void putAll(Map m); void clear(); // Срезы коллекции public Set keySet(); public Collection values(); public Set > entrySet(); public interface Entry { K getKey(); V getValue(); V setValue(V value); }
Интерфейс Map: пример static boolean validate(Map attrMap, Set requiredAttrs, Set permittedAttrs) { boolean valid = true; Set attrs = attrMap.keySet(); if(!attrs.containsAll(requiredAttrs)) { Set missing = new HashSet (requiredAttrs); missing.removeAll(attrs); System.out.println("Missing attributes: " + missing); valid = false; } if (!permittedAttrs.containsAll(attrs)) { Set illegal = new HashSet (attrs); illegal.removeAll(permittedAttrs); System.out.println("Illegal attributes: " + illegal); valid = false; } return valid; }
public class Anagrams { public static void main(String[] args) { int minGroupSize = Integer.parseInt(args[1]); // Read words from file and put into a simulated multimap Map > m = new HashMap >(); try { Scanner s = new Scanner(new File(args[0])); while (s.hasNext()) { String word = s.next(); String alpha = alphabetize(word); List l = m.get(alpha); if (l == null) m.put(alpha, l=new ArrayList ()); l.add(word); } } catch (IOException e) { System.err.println(e); System.exit(1);} // Print all permutation groups above size threshold for (List l : m.values()) if (l.size() >= minGroupSize) System.out.println(l.size() + ": " + l); } private static String alphabetize(String s) { char[] a = s.toCharArray(); Arrays.sort(a); return new String(a); } }