Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Пример 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...