Пример 4.5. Сравнение комплексных чисел
class Complex { public double Re = 0.0; public double Im = 0.0; public Complex(){} public Complex(double re, double im) { Re = re; Im = im; } } class ComplexCompare implements Comparator { public int compare(Object objl, Object obj2) { Complex z1 = (Complex)objl; Complex z2 = (Complex)obj2; if (z1.Re!= z2.Re) return (int)(z1.Re > z2.Re? 1: -1); else if (z1.Im!= z2.Im) return (int)(z1.Im > z2.Im? 1: -1); else return 0; } public boolean equals(Object z) { return compare(this, z) == 0; } }
Классы, создающие множества. Класс HashSet полностью реализует интерфейс Set и итератор типа Iterator. Класс HashSet используется в тех случаях, когда надо хранить только одну копию каждого элемента. В классе HashSet четыре конструктора: HashSet() — создает пустой объект с показателем загруженности 0,75; HashSet(int capacity) — создает пустой объект с начальной емкостью capacity и показателем загруженности 0,75; HashSet(int capacity, float loadFactor) — создает пустой объект с начальной емкостью capacity и показателем загруженности loadFactor; HashSet(Collection coll) — создает объект, содержащий все элементы коллекции coll, с емкостью, равной удвоенному числу элементов коллекции coll, но не менее 11, и показателем загруженности 0,75. Упорядоченные множества. Класс TreeSet полностью реализует интерфейс SortedSet и итератор типа Iterator. Класс TreeSet реализован как бинарное дерево поиска, его элементы хранятся в упорядоченном виде. Это значительно ускоряет поиск нужного элемента. Порядок задается либо естественным следованием элементов, либо объектом, реализующим интерфейс сравнения Comparator. В классе TreeSet четыре конструктора: TreeSet() — создает пустой объект с естественным порядком элементов; TreeSet(Comparator с) — создает пустой объект, в котором порядок задается объектом сравнения с; TreeSet(Collection coll) — создает объект, содержащий все элементы коллекции coll, с естественным порядком ее элементов; TreeSet(SortedMap sf) — создает объект, содержащий все элементы отображения sf, в том же порядке.
В пример 4.6 показано, как можно хранить комплексные числа в упорядоченном виде. Порядок задается объектом класса ComplexCompare. Пример 4.6. Хранение комплексных чисел в упорядоченном виде TreeSet ts = new TreeSet(new ComplexCompare()); ts.add(new Complex(1.2, 3.4)); ts.add(new Complex(-1.25, 33.4)); ts.add(new Complex(1.23, -3.45)); ts.add(new Complex(16.2, 23.4)); Iterator it = ts.iterator(); while(it.hasNext()) { Complex c = (Complex)it.next(); System.out.println("(" + c.Re + "; " + c.Im + ")"); } Практические задания
1. Изучить особенности реализации классов-коллекций в Java. 2. Доработать программу, созданную в лабораторных работах № 2 - 3: 1) добавить генерируемым объектам понятия «время рождения» и «время жизни». Время рождения устанавливается в момент генерации объекта, и по значению соответствует времени, прошедшему от начала симуляции. Время жизни – время, через которое объект должен исчезнуть, считая от времени рождения; 2) вынести параметры времен жизни объектов в пользовательский интерфейс. Для каждого типа объекта должно задаваться собственное время. Рекомендуется использовать текстовые поля, но следуют помнить о проверке на ввод некорректных данных; 3) огранизовать коллекцию сгенерированных объектов по варианту. При генерации объекта происходит добавление его в коллекцию. При обновлении времени обойдите коллекцию и удалите все объекты, время жизни которых истекло; 4) добавить генерируемым объектам уникальные целочисленные идентификаторы (случайные числа), которые назначаются при генерации объекта. Для хранения сгенерированных идентификаторов используйте коллекцию удобную для поиска по варианту; 5) добавьте в панель управления кпопку «Текущие объекты». По нажатию на эту кнопку появляется модальное диалоговое окно, содержащее список всех «живых» объектов на момент нажатия со временем их рождения (время рождения – ключ). В класс диалогового окна должна передаваться коллекция с хранением объектов по времени рождения. Типы коллекций задаются вариантом.
Вариант 1 Коллекция для хранения объектов: Vector Коллекция для хранения и поиска уникальных идентификаторов: HashSet Коллекция для хранения объектов по времени рождения: TreeMap Вариант 2 Коллекция для хранения объектов: ArrayList Коллекция для хранения и поиска уникальных идентификаторов: HashSet Коллекция для хранения объектов по времени рождения: TreeMap Вариант 3 Коллекция для хранения объектов: LinkedList Коллекция для хранения и поиска уникальных идентификаторов: HashSet Коллекция для хранения объектов по времени рождения: TreeMap Вариант 4 Коллекция для хранения объектов: Vector Коллекция для хранения и поиска уникальных идентификаторов: TreeSet Коллекция для хранения объектов по времени рождения: HashMap Вариант 5 Коллекция для хранения объектов: ArrayList Коллекция для хранения и поиска уникальных идентификаторов: TreeSet Коллекция для хранения объектов по времени рождения: HashMap Вариант 6 Коллекция для хранения объектов: LinkedList Коллекция для хранения и поиска уникальных идентификаторов: TreeSet Коллекция для хранения объектов по времени рождения: HashMap Вариант 7 Коллекция для хранения объектов: Vector Коллекция для хранения и поиска уникальных идентификаторов: HashSet Коллекция для хранения объектов по времени рождения: HashMap Вариант 8 Коллекция для хранения объектов: ArrayList Коллекция для хранения и поиска уникальных идентификаторов: HashSet Коллекция для хранения объектов по времени рождения: HashMap Вариант 9 Коллекция для хранения объектов: Vector Коллекция для хранения и поиска уникальных идентификаторов: TreeSet Коллекция для хранения объектов по времени рождения: TreeMap Вариант 10 Коллекция для хранения объектов: ArrayList Коллекция для хранения и поиска уникальных идентификаторов: TreeSet Коллекция для хранения объектов по времени рождения: TreeMap
Вопросы для самопроверки
1. Для чего используются классы-коллекции? 2. Что такое класс Vector? Для чего он используется? Каковы его достоинства и недостатки? Какая структура данных используется в классе Vector? 3. Назовите особенности организации класса Stack.
4. Для чего применяется класс Hashtable? Какая структура данных используется в классе Hashtable? 5. Что такое коэффициент загруженности? 6. Что такое емкость класса-коллекции? 7. Назначение и особенности применения класса Properties. 8. Расскажите об иерархии интерфейсов коллекций Java. Объясните назначение каждого интерфейса. 9. Каково назначение интерфейса Collection? 10. Опишите возможности применения интерфейсов Map, Set и List. 11. Для чего применяются интерфейсы Iterator и ListIterator? 12. Опишите классы ArrayList и LinkedList. 13. Опишите классы HashSet, TreeSet. 14. Опишите классы HashMap, TreeMap. 15. Какие структуры данных используются в этих классах? 16. Какие алгоритмы для обработки коллекций существуют в Java и как их использовать?
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|