Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СТП / lec / java2014-lec-07

.pdf
Скачиваний:
6
Добавлен:
03.03.2016
Размер:
1.11 Mб
Скачать

Реализация интерфейсов коллекций в 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

Соседние файлы в папке lec