Overzicht van vergelijkbaar in Java-voorbeeld

Vergelijkbaar in Java is een interferentie die wordt gebruikt om huidige objecten te vergelijken met andere objecten van hetzelfde type. Deze vergelijking kan worden gebruikt om elementen in een verzameling te sorteren. U moet de interface in een klasse implementeren om deze sorteerbaar of "vergelijkbaar" te maken. U zult slechts één methode "CompareTo" moeten implementeren. Dit ordenen van elk type wordt natuurlijke ordening genoemd en de geïmplementeerde "CompareTo" -methode wordt natuurlijke vergelijkingsmethode genoemd. Hier in dit artikel in Comparable in Java Example zullen we de verschillende voorbeelden over vergelijkbaar in Java bekijken.

Verklaring:

Interface vergelijkbaar

Om deze interface te implementeren, moet u deze methode implementeren:

public int compareTo(To);

parameters:

T - is het type object waarmee dit object wordt vergeleken.

Winstwaarde:

De methode CompareTo retourneert 0 als het opgegeven object en dit object gelijk zijn, retourneert een negatief geheel getal als dit object kleiner is dan het opgegeven object en retourneert een positief geheel getal als dit object groter is dan het opgegeven object.

Werpt:

ClasscastException - Als het object dat aan deze methode wordt doorgegeven null is

NullPointerException - Als het object dat aan deze methode is doorgegeven, niet compatibel is met dit object.

Aan klassen die een vergelijkbare interface implementeren, wordt hun natuurlijke volgorde gespecificeerd en ze kunnen dus rechtstreeks in Collection of Arrays worden gesorteerd met Collections.sort () en Arrays.sort (). Ze kunnen ook worden gebruikt als de sleutel in gesorteerde kaarten en elementen in gesorteerde sets zonder Comparator apart op te geven.

Laten we de vergelijkbare interface begrijpen met behulp van een voorbeeld:

Voorbeeld:

package comparableDemo;
import java.util.TreeSet;
public class Student implements Comparable (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public int compareTo(Student o) (
if (this.rollNo > o.rollNo) (
return 1;
) else if (this.rollNo == o.rollNo) (
return 0;
) else (
return -1;
)
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Output:

Uitleg

Dit is een applicatie om studentgegevens op te slaan.

  • Eerst hebben we een klasse 'Student' gemaakt als de representatie van de entiteit Student. We gaan basisgegevens opslaan, zoals rolnummer, naam en leeftijd van studenten.
  • En de vereiste is om de lijst met studenten te sorteren op rolnummer.
  • Om aan deze vereiste te voldoen, is een vergelijkbare interface geïmplementeerd en vergeleken met de studenten op basis van rolnummer, omdat u de implementatie van de methode "CompareTo" kunt zien.
  • Dan hebben we de belangrijkste methode om de functionaliteit te tonen. Hier hebben we een "TreeSet" gemaakt en vijf studenten met willekeurige rolnummers toegevoegd. We hebben “TreeSet” gebruikt omdat het elementen in gesorteerde volgorde opslaat.
  • Als u nu door de lijst met studenten bladert, zult u zien dat studenten zijn gesorteerd op rolnummer. Dat was onze eis!
  • We kunnen de studenten ook sorteren op basis van andere kenmerken, zoals naam of leeftijd. Om dit te doen, moeten we naam- of leeftijdsvariabelen gebruiken in de methode "CompareTo" in plaats van "rollNo".

Voorbeeld:

@Override
public int compareTo(Student o) (
if (this.age> o.age) (
return 1;
) else if (this.age == o.age) (
return 0;
) else (
return -1;
)
)
OR
@Override
public int compareTo(Student o) (
return this.name.compareTo(o.name);
)

Vergelijkbaar versus Comparator

Comparator is ook een interface zoals Comparable die wordt gebruikt voor het vergelijken van twee objecten van een type. Het verschil is dat Comparator niet in de entiteitsklasse zelf is geïmplementeerd. We moeten het in een andere klasse implementeren en de instantie ervan expliciet aan het sorteermechanisme verstrekken. We kunnen voor dit doel ook een anonieme klasse-instantie gebruiken.

Stel bijvoorbeeld dat we een studentenklas hebben zonder een vergelijkbare interface te implementeren:

package comparableDemo;
import java.util.TreeSet;
public class Student(
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Als u dit programma probeert uit te voeren, krijgt u deze uitzondering:

Omdat TreeSet een manier nodig heeft om de elementen te sorteren.

Om deze fout op te lossen, kunnen we Comparator gebruiken zoals geïmplementeerd in dit programma:

package comparableDemo;
import java.util.Comparator;
import java.util.TreeSet;
public class Student (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
Comparator studentComparator = new Comparator() (
@Override
public int compare(Student o1, Student o2) (
if (o1.rollNo < o2.rollNo) (
return -1;
) else if (o1.rollNo == o2.rollNo) (
return 0;
) else (
return 1;
)
)
);
TreeSet students = new TreeSet(studentComparator);
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

U kunt zien dat de Comparator-interface is geïmplementeerd in een anonieme binnenklasse en dat instantie aan TreeSet wordt verstrekt voor het sorteren van elementen. Nu krijgt u een goede uitvoer zoals eerder.

Collectie-interface in Java

De verzameling is de hoofdinterface in het verzamelraamwerk. Het bevat de verklaring van alle algemene methoden die zijn geïmplementeerd in collecties zoals Lijsten en Sets. Map-interface breidt de Collection-interface niet uit, omdat Map een verzameling sleutel / waarde-paren is en niet alleen een verzameling elementen. Sommige methoden van de Collection-interface zijn geïmplementeerd in een abstracte klasse "AbstractCollection".

Deze interface wordt niet rechtstreeks geïmplementeerd, maar uitgebreid met specifieke interfaces omdat de implementatie van deze methoden collectie-specifiek is. Sommige collecties staan ​​bijvoorbeeld dubbele elementen toe (Ex-lijst), terwijl sommige dat niet doen (Ex-Set), sommige handhaven indexering (Ex-Lijst), terwijl sommige dat niet doen (Ex-Set).

Enkele belangrijke methoden worden hier beschreven:

  1. Boolean add (E e): deze methode voegt een element toe aan deze verzameling en retourneert de status van de add-operatie.
  2. boolean addAll (Collection c): deze methode voegt alle elementen uit de opgegeven collectie toe aan deze collectie en retourneert de status van de add-operatie.
  3. void clear (): met deze methode worden alle elementen uit deze verzameling verwijderd.
  4. boolean bevat (Object o): deze methode controleert of het opgegeven element aanwezig is in de verzameling of niet. Retourneert dienovereenkomstig waar of onwaar.
  5. boolean bevat (Verzameling c): deze methode controleert of alle elementen uit de opgegeven verzameling in deze verzameling aanwezig zijn of niet en retourneert dienovereenkomstig waar of onwaar.
  6. boolean isEmpty (): deze methode controleert of de verzameling leeg is of niet en retourneert dienovereenkomstig waar of onwaar.
  7. Iterator iterator (): deze methode retourneert iterator voor deze verzameling. Iterator wordt gebruikt om alle elementen in deze collectie te doorlopen.
  8. boolean remove (Object o): deze methode verwijdert het opgegeven element uit de verzameling en retourneert de status van de verwijderbewerking.
  9. boolean removeAll (Collection c): deze methode verwijdert alle elementen uit deze collectie die aanwezig zijn in de opgegeven collectie en deze collectie.
  10. boolean retainAll (Collection c): Deze methode verwijdert alle elementen uit deze collectie die niet aanwezig zijn in de opgegeven collectie en aanwezig zijn in deze collectie.
  11. int size (): deze methode retourneert de grootte van deze verzameling.
  12. Object () toArray (): dit is een belangrijke methode die de array vormt en retourneert die alle elementen van deze verzameling bevat.
  13. T () toArray (T () a): deze methode voegt alle elementen van deze verzameling toe aan een opgegeven array en retourneert de array. Als de grootte van de array kleiner is dan de grootte van deze verzameling, maakt deze een nieuwe array met typen die hetzelfde zijn als het type van de opgegeven array en retourneert deze. Als de grootte van de opgegeven array groter is dan de grootte van deze verzameling, wordt de nulwaarde ingesteld voor resterende elementen in de array en wordt de array geretourneerd.

Conclusie - Vergelijkbaar in Java-voorbeeld

Om samen te vatten, de interface Vergelijkbaar in Java is erg handig voor het handmatig vergelijken van objecten, het sorteren van collecties en arrays of om de collectie zelf te sorteren. We kunnen ook elementen sorteren op basis van verschillende kenmerken van de entiteit. Het is niet verplicht maar wordt ten zeerste aanbevolen om hetzelfde resultaat van gelijken en de "CompareTo" -methode te hebben om de rommel in een verzameling te voorkomen die beide methoden gebruikt.

Aanbevolen artikelen

Dit is een handleiding voor Vergelijkbaar in Java-voorbeeld. Hier bespreken we de introductie vergelijkbaar in Java-voorbeeld, collectie-interface in Java, enz. U kunt ook onze andere voorgestelde artikelen bekijken voor meer informatie–

  1. Sorteren op Java
  2. Beste Java IDE
  3. Sequenties in Python
  4. Oracle String-functies
  5. Volledige gids voor sorteren in C # met voorbeelden
  6. PL / SQL-collecties | Syntaxis, typen, uitzonderingen