Реализация интерфейсов коллекций в JDK
•Класс Vector реализует интерфейс List
•Класс Stack является дочерним классом Vector и
поддерживает методы push, pop и peek.
•Класс Hashtable реализует интерфейс
•Класс Properties является расширением класса Hashtable,
и использованием Strings для ключей и значений.
•У каждой из этих коллекций есть метод elements,
который возвращает объект интерфейса Enumeration.
Важно, что этот интерфейс является совместимым с интерфейсом Iterator.
31
Сортировка коллекций
Интерфейсы Comparable и Comparator предназначены для
сортировки коллекций:
•Интерфейс Comparable задает естественный порядок сортировки для классов, которые реализуют интерфейс.
•Интерфейс Comparator задает сортировочные отношения и может быть использован для переопределения естественного способа сортировки
•Оба интерфейсы полезны для сортировки коллекций.
32
Интерфейс Comporable
Представляет естественный порядок сортировки для классов,
реализующих этот интерфейс:
•Используется только для сортировки
•Метод compareTo должен быть реализован чтобы сделать каждый класс «сортируемым»
•int compareTo (Object o)
•Классы String, Date и Integer реализуют интерфейс
Comparable
•Можно выполнять сортировку коллекции List, если ее
объекты реализуют интерфейс Comparable.
http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html 33
Реализация интерфейса Comporable
в классах-обертках
Class |
Natural Ordering |
Byte |
Signed numerical |
Character |
Unsigned numerical |
Long |
Signed numerical |
Integer |
Signed numerical |
Short |
Signed numerical |
Double |
Signed numerical |
Float |
Signed numerical |
BigInteger |
Signed numerical |
BigDecimal |
Signed numerical |
|
|
Boolean |
Boolean.FALSE < Boolean.TRUE |
|
|
File |
System-dependent lexicographic on path name |
|
|
String |
Lexicographic |
Date |
Chronological |
34
Пример реализации интерфейса Comporable
1import java.util.*;
2class Student implements Comparable {
3String firstName, lastName;
4int studentID = 0;
5double GPA = 0.0;
6public Student(String firstName, String lastName, int studentID, double GPA) {
7 |
if (firstName — |
null || lastName — null || studentID — 0 |
8 |
|| GPA — 0.0) { |
throw new IllegalArgumentExceptionO ; } |
9 |
this.firstName = firstName; |
|
10 |
this.lastName = |
lastName; |
11 |
this.studentID = studentID; |
|
12 |
this.GPA = GPA; |
|
13 |
} |
|
14public String firstName() { return firstName; }
15public String lastName() { return lastName; }
16public int studentID() { return studentID; }
17public double GPA() { return GPA; }
18// реализация метода compareTo
19public int compareTo(Object o) {
20double f = GPA - ((Student)o).GPA;
21if (f=0.0)
22return 0; // 0 - признак равенства
23else if (f<0.0)
24return -1; // «-1» - значение атрибута меньше значения аргумента
25else
26return 1; // «1» - значение атрибута больше значения аргумента
27}
28}
35
Пример реализации интерфейса Comporable
1import java.util.*;
2public class ComparableTest {
3public static void main(String[] args) {
4TreeSet StudentSet = new TreeSet();
5studentSet.add(new Student("Mike","HaufCmann", 101, 4.0));
6studentSet.add(new Student("John","Lynn", 102, 2.8));
7studentSet.add(new Student("Jim","Max", 103, 3.6));
8studentSet.add(new Student("Kelly","Grant", 104, 2.3));
9Object[] studentArray = studentSet.toArray();
10Student s;
11for(Object obj : studentArray){
12 |
s = (Student) Obj; |
13 |
System.out.print!("Name - %s %s ID - %d GPA - %.lf\n", |
14 |
s.firstName(), s.lastName(), s.studentID(), s.GPA(); |
15 |
} |
16}
17}
Generated Output:
Name = Kelly Grant ID = 104 GPA = 2
Name = John Lynn ID = 102 GPA = 2.8
Name = Jim Max ID = 103 GPA = 3.6
Name = Mike Hauffmann ID = 101 GPA = 4.0
36
Интерфейс Comparator
•Задает сортировочные отношения
•Позволяет реализовать сортировку в порядке, отличном от естественного
•Используется для объектов, которые не реализуют интерфейс Comparable
•Интерфейс может быть передан методу сортировки
Для реализации интерфейса Comparator необходимо
реализовать метод compare():
int compare (Object o1, Object o2)
http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html 37
Пример реализации интерфейса Comparator
1 class Student {
2String firstName, lastName;
3int studentID = 0;
4double GPA = 0.0;
5public Student(String firstName, String lastName,
6 |
int studentID, double GPA) { |
|
7 |
if (firstName == null || lastName == null || studentID == 0 |
|
8 |
|| GPA == 0.0) throw new NullPointerException(); |
|
9 |
this.firstName = firstName; |
|
10 |
this.lastName = lastName; |
|
11 |
this.studentID = studentID; |
|
12 |
this.GPA = GPA; |
|
13 |
} |
|
14 |
public String firstName() |
{ return firstName; } |
15 |
public String lastName() |
{ return lastName, } |
16 |
public int studentID() |
{ return StudentID; } |
17 |
public double GPA() |
{ return GPA; } |
18 |
} |
|
38
Пример реализации интерфейса Comparator
1import java.util.*;
2public class NameComp implements Comparator {
3public int compare (Object o1, Object o2) {
4 |
return |
5 |
(((Student)o1).firstName.compareTo(((Student)o2).firstName)); |
6}
7}
1import java.util.*;
2public class GradeComp implements Comparator {
3public int compare (Object o1, Object o2) {
4 |
if (((Student)o1).GPA == ((Student)o2).GPA) |
5 |
return 0; |
6 |
else if (((Student)o1).GPA < ((Student)o2).GPA) |
7 |
return -1; |
8 |
else |
9 |
return 1; |
10 |
} |
11 |
} |
39
Пример реализации интерфейса Comparator
1import java.util.*;
2public class ComparatorTest {
3public static void main(String[] args) {
4Comparator c = new NameComp();
5TreeSet studentSet = new TreeSet(c);
6studentSet.add(new Student("Mike", "Hauf fmann", 101, 4.0));
7studentSet.add(new Student("John", "Lynn", 102, 2.8 ));
8studentSet.add(new Student("Jim", "Max", 103, 3.6));
9studentSet.add(new Student("Kelly", "Grant",104, 2.3));
10Object[] studentArray = studentSet.toArray();
11Student s;
12for(Object obj : studentArray) {
13 |
S = (Student) obj; |
14 |
System.out.printIn("Name - %s %s ID - %d GPA - %.lf\n", |
15 |
s.firstNameO, s.lastName(), s.studentlDO, s.GPAO); |
16 |
} |
17}
18}
Name = Jim Max ID = 0 GPA = 3.6
Name = John Lynn ID = 0 GPA = 2.8
Name = Kelly Grant ID = 0 GPA = 2.3
Name = Mike Hauffmann ID = 0 GPA = 4.0
40