|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Доступ разрешен,так как доступ в систему разрешен одновременно только для двух пользователей. Если в коде изменить значение константы MAX_NUM на большее, чем 2, то новый пользователь получит права доступа. Класс EnumMap<K extends Enum<K>, V> в качестве ключа может принимать только объекты, принадлежащие одному типу enum, который должен быть определен при создании коллекции. Специально организован для обеспечения максимальной скорости доступа к элементам коллекции. /* пример # 17: пример работы с классом EnumMap: UseEnumMap.java */ package chapt10; import java.util.EnumMap;
enum User { STUDENT, TUTOR, INSTRUCTOR, DEAN } class UserPriority { private int priority;
public UserPriority(User k) { switch (k) { case STUDENT: priority = 1; break; case TUTOR: priority = 3; break; case INSTRUCTOR: priority = 7; break; case DEAN: priority = 10; break; default: priority = 0; } } public int getPriority() { return priority; } } public class UseEnumMap { public static void main(String[] args) { EnumMap<User, UserPriority> faculty = new EnumMap<User, UserPriority> (User. class); for (User user: User.values()) { faculty.put(user, new UserPriority(user)); } for (User user: User.values()) { System.out.println(user.name() + "-> Priority:" + ((UserPriority) faculty.get(user)).getPriority()); } } } В результате будет выведено: STUDENT-> Priority:1 TUTOR-> Priority:3 INSTRUCTOR-> Priority:7 DEAN-> Priority:10 Унаследованные коллекции В ряде распределенных приложений, например с использованием сервлетов, до сих пор применяются коллекции, более медленные в обработке, но при этом потокобезопасные, существовавшие в языке Java с момента его создания, а именно карта Hashtable<K,V>, список Vector<E> и перечисление Enumeration<E>. Все они также были параметризованы, но сохранили все свои особенности. Класс Hashtable<K,V> реализует интерфейс Map, но обладает также несколькими интересными методами: Enumeration<V> elements() – возвращает перечисление (аналог итератора) для значений карты; Enumeration<K> keys() – возвращает перечисление для ключей карты. /* пример # 18: создание хэш-таблицы и поиск элемента по ключу: HashTableDemo.java */ package chapt10; import java.util.*; import java.io.*;
public class HashTableDemo { public static void main(String[] args) { Hashtable<Integer, Double> ht = new Hashtable<Integer, Double>(); for (int i = 0; i < 5; i++) ht.put(i, Math.atan(i)); Enumeration<Integer> ek = ht.keys(); int key; while (ek.hasMoreElements()) { key = ek.nextElement(); System.out.printf("%4d ", key); } System. out. println(""); Enumeration<Double> ev = ht.elements(); double value; while (ev.hasMoreElements()) { value = ev.nextElement(); System. out. printf("%.2f ", value); } } } В результате в консоль будет выведено: 4 3 2 1 0 1,33 1,25 1,11 0,79 0,00 Принципы работы с коллекциями, в отличие от их структуры, со сменой версий языка существенно не изменились. Класс Collections Класс Collections содержит большое количество статических методов, предназначенных для манипулирования коллекциями.С применением предыдущих версий языка было разработано множество коллекций, в которых никаких проверок нет, следовательно, при их использовании нельзя гарантировать, что в коллекцию не будет помещен “посторонний” объект. Для этого в класс Collections был добавлен новый метод – checkedCollection(): public static <E> Collection <E> checkedCollection(Collection<E> c, Class<E> type)Этот метод создает коллекцию, проверяемую на этапе выполнения, то есть /* пример # 19: проверяемая коллекция: SafeCollection.java */ package chapt10; import java.util.*;
public class SafeCollection { public static void main(String args[]) { Collection c = Collections.checkedCollection( new HashSet<String>(), String. class); c.add("Java"); c.add(7.0); // ошибка времени выполнения } } В этот же класс добавлен целый ряд методов, специализированных для проверки конкретных типов коллекций, а именно: checkedList(), <T> boolean addAll(Collection<? super T> c, T... a) – добавляет в параметризованную коллекцию соответствующие параметризации элементы; <T> void copy(List<? super T> dest, List<? extends T> src) – копирует все элементы из одного списка в другой; boolean disjoint(Collection<?> c1, Collection<?> c2) – возвращает true, если коллекции не содержат одинаковых элементов; <T> List <T> emptyList(), <K,V> Map <K,V> emptyMap(), <T> void fill(List<? super T> list, T obj) – заполняет список заданным элементом; int frequency(Collection<?> c, Object o) – возвращает количество вхождений в коллекцию заданного элемента; <T extends Object & Comparable <? super T>> T max(Collection<? extends T> coll), <T extends Object & Comparable <? super T>> T min(Collection<? extends T> coll) – возвращают минимальный <T> T max(Collection <? extends T> coll, Comparator<? super T> comp), <T> T min(Collection<? extends T> coll, Comparator<? super T> comp) – возвращают минимальный и максимальный элемент соответственно, используя Comparator для сравнения; <T> List <T> nCopies(int n, T o) – возвращает список из n заданных элементов; <T> boolean replaceAll(List<T> list, T oldVal, T newVal) – заменяет все заданные элементы новыми; void reverse(List<?> list) – “переворачивает” список; void rotate(List<?> list, int distance) – сдвигает список циклически на заданное число элементов; void shuffle(List<?> list) – перетасовывает элементы списка; <T> Set <T> singleton(T o), singletonList(T o), singletonMap(K key, V value) – создают множество, список и карту отображения, состоящие из одного элемента; <T extends Comparable<? super T>> void sort(List<T> list), <T> void sort(List<T> list, Comparator<? super T> c) – сортировка списка, естественным порядком и используя Comparator соответственно; void swap(List<?> list, int i, int j) – меняет местами элементы списка стоящие на заданных позициях. /* пример # 20: методы класса Collections: CollectionsDemo.java: MyComparator.java */ package chapt10; import java.util.ArrayList; import java.util.Collections; import java.util.List;
public class CollectionsDemo { public static void main(String[] args) { MyComparator<Integer> comp = new MyComparator<Integer>(); ArrayList<Integer> list = new ArrayList<Integer>();
Collections. addAll (list, 1, 2, 3, 4, 5); Collections. shuffle (list); print(list); Collections. sort (list, comp); print(list); Collections. reverse (list); print(list); Collections. rotate (list, 3); print(list); System. out. println("min: " + Collections.min(list, comp)); System. out. println("max: " + Collections.max(list, comp));
List<Integer> singl = Collections.singletonList(71); print(singl); //singl.add(21);//ошибка времени выполнения } static void print(List<Integer> c) { for (int i: c) System.out.print(i + " "); System.out.println(); } } package chapt10; import java.util.Comparator;
public class MyComparator<T> implements Comparator<Integer> { public int compare(Integer n, Integer m) { return m.intValue() - n.intValue(); } } В результате будет выведено: 4 3 5 1 2 5 4 3 2 1 1 2 3 4 5 3 4 5 1 2 Min: 5 Max: 1 Класс Arrays В пакете java.util находится класс Arrays, который содержит методы манипулирования содержимым массива, а именно для поиска, заполнения, сравнения, преобразования в коллекцию и прочие: int binarySearch( параметры ) – перегруженный метод организации бинарного поиска значения в массивах примитивных и объектных типов. Возвращает позицию первого совпадения; void fill( параметры ) – перегруженный метод для заполнения массивов значениями различных типов и примитивами; void sort( параметры ) – перегруженный метод сортировки массива или его части с использованием интерфейса Comparator и без него; static <T> T[] copyOf(T[] original, int newLength) –заполняет массив определенной длины, отбрасывая элементы или заполняя null при необходимости; static <T> T[] copyOfRange(T[] original, int from, int to) – копирует заданную область массива в новый массив; <T> List<T> asList(T... a) – метод, копирующий элементы массива в объект типа List<T>. В качестве простого примера применения указанных методов можно привести следующий код. /* пример # 21: методы класса Arrays: ArraysEqualDemo.java */ package chapt10; import java.util.*; public class ArraysEqualDemo { public static void main(String[] args) { char m1[] = new char [3]; char m2[] = { 'a', 'b', 'c' }, i; Arrays.fill(m1, 'a'); System.out.print("массив m1:"); for (i = 0; i < 3; i++) System.out.print(" " + m1[i]); m1[1] = 'b'; m1[2] = 'c'; //m1[2]='x'; // приведет к другому результату if (Arrays.equals(m1, m2)) System.out.print("\nm1 и m2 эквивалентны"); Else System.out.print("\nm1 и m2 не эквивалентны");
m1[0] = 'z'; Arrays.sort(m1); System.out.print("\nмассив m1:"); for (i = 0; i < 3; i++) System.out.print(" " + m1[i]); System.out.print( "\n значение 'c' находится в позиции-" + Arrays.binarySearch(m1, 'c')); Integer arr[] = {35, 71, 92}; //вывод массива объектов в строку System.out.println(Arrays.deepToString(arr)); //вычисление хэш-кода исходя и значений элементов System.out.println(Arrays.deepHashCode(arr)); Integer arr2[] = {35, 71, 92}; //сравнение массивов по седержимому System.out.println(Arrays.deepEquals(arr, arr2)); char m3[] = new char [5]; // копирование массива m3 = Arrays. copyOf (m1, 5); System. out. print("массив m3:"); for (i = 0; i < 5; i++) System. out. print(" " + m3[i]); } } В результате компиляции и запуска будет выведено: Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.021 сек.) |