Интерфейсът Java Comparable се използва за подреждане на обектите на дефинирания от потребителя клас. Този интерфейс се намира в пакета java.lang и съдържа само един метод с име compareTo(Object). Той предоставя само една последователност за сортиране, т.е. можете да сортирате елементите само на базата на един член от данни. Например, може да е rollno, име, възраст или нещо друго.
метод compareTo(Object obj).
public int compareTo(Object obj): Използва се за сравняване на текущия обект с посочения обект. Връща се
- положително цяло число, ако текущият обект е по-голям от указания обект.
- отрицателно цяло число, ако текущият обект е по-малък от указания обект.
- нула, ако текущият обект е равен на посочения обект.
Можем да сортираме елементите на:
- Стрингови обекти
- Обекти от клас обвивка
- Дефинирани от потребителя класови обекти
Колекции клас
Колекции предоставя статични методи за сортиране на елементите на колекциите. Ако елементите на колекцията са от Set или Map, можем да използваме TreeSet или TreeMap. Не можем обаче да сортираме елементите на List. Класът Collections предоставя методи за сортиране на елементите от тип List.
Метод на клас Collections за сортиране на елементи от List
обществено невалидно сортиране (списък със списък): Използва се за сортиране на елементите на List. Елементите на списъка трябва да са от тип Comparable.
Забележка: Класът String и класовете Wrapper изпълняват интерфейса Comparable по подразбиране. Така че, ако съхранявате обектите на низове или класове обвивки в списък, набор или карта, той ще бъде Comparable по подразбиране.
Сравним с Java пример
Нека видим примера на интерфейса Comparable, който сортира елементите на списъка въз основа на възраст.
Файл: Student.java
class Student implements Comparable{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int compareTo(Student st){ if(age==st.age) return 0; else if(age>st.age) return 1; else return -1; } }
Файл: TestSort1.java
import java.util.*; public class TestSort1{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); Collections.sort(al); for(Student st:al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } }
105 Jai 21 101 Vijay 23 106 Ajay 27
Java Comparable Пример: обратен ред
Нека видим същия пример на интерфейса Comparable, който сортира елементите на списъка въз основа на възраст в обратен ред.
Файл: Student.java
class Student implements Comparable{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } public int compareTo(Student st){ if(age==st.age) return 0; else if(age<st.age) return 1; else -1; } < pre> <p>File: TestSort2.java</p> <pre> import java.util.*; public class TestSort2{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(new Student(101,'Vijay',23)); al.add(new Student(106,'Ajay',27)); al.add(new Student(105,'Jai',21)); Collections.sort(al); for(Student st:al){ System.out.println(st.rollno+' '+st.name+' '+st.age); } } } </pre> <pre> 106 Ajay 27 101 Vijay 23 105 Jai 21 </pre></st.age)>
106 Ajay 27 101 Vijay 23 105 Jai 21