آموزش جامع Comparable و Comparator در جاوا
جلسات دوره
مهدی عباسی
مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و .... مشاهده رزومه
معرفی کامل اینترفیس Comparator در جاوا
در این فصل میخواهیم کلاسها و اینترفیسهای یکی از بزرگترین پکیج های جاوا به نام java.util را معرفی کنیم.
در این جلسه میخواهیم اینترفیس Comparator که در پکیج java.util قرار دارد را بررسی کنیم. به کمک اینترفیس Comparator میتوانیم مقادیر را مقایسه کنیم.
همانطور که در جلسات گذشته توضیح دادیم متد equals که درون کلاس object قرار داشت، مساوی بودن یا نبودن دو مقدار را برمیگرداند. اما با استفاده از Comparator میتوانیم علاوه بر مساوی بودن یا نبودن، بزرگتر یا کوچکتر بودن مقدار را بدست آوردیم. به عنوان مثال عدد 23 از عدد 44 کوچکتر است. همچنین میتوان دو مقدار رشته ای را مقایسه کنیم(از نظر کد اسکی). این نوع مقایسه کردن در مرتب سازی زیاد کاربرد دارد.
در گذشته با متد CompareTo و Compare آشنا شدیم. در این جلسه میخواهیم آبجکتها و کلاس مدل را به کمک این متد مقایسه کنیم.
در ابتدا یک کلاس به نام Person میسازیم:
public class Person {
private int id;
private String name;
private int age;
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
برای مقایسه کردن کلاسها باید بر اساس یک فیلد عملیات بررسی را انجام دهیم به عنوان مثال میخواهیم بر اساس مقدار age مقایسه را انجام دهیم. برای پیاده سازی این کار یک کلاس با نام AgeComparator میسازیم و اینترفیس Comparator را implement میکنیم و متد compare از اینترفیس Comparator را Override میکنیم. این متد دو ورودی از نوع آبجکت دارد و ما به کمک Type casting آنها را درون شی از کلاس Person قرار میدهیم و سپس شرط بررسی را انجام میدهیم.
public class AgeComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
Person person1=(Person) o1;
Person person2=(Person) o2;
if(person1.getAge()==person2.getAge())
return 0;
if(person1.getAge()>person2.getAge())
return 1;
return -1;
}
}
حالا در کلاس Person از کلاس AgeComparator ارث بری میکنیم.
public class Person extends AgeComparator{
private int id;
private String name;
private int age;
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
حال درون کلاس Main میتوانیم شی از کلاس Person تعریف کنیم و آنها را با متد compare مقایسه(بر اساس مقدار age) کنیم.
public static void main(String[] args) {
Person person1=new Person(1,"ali",13);
Person person2=new Person(2,"mehdi",23);
System.out.println(person2.compare(person1,person2));
}
خروجی
-1
اما ما نیاز نداریم که 2 مقدار برای ورودی تابع ارسال کنیم. میخواهیم به این صورت باشد:
person2.compare(person1);
برای اینکه یک ورودی به تابع ارسال کنیم، یک تابع دیگر به نام compareTo درون کلاس Person میسازیم و به عنوان ورودی اول تابع compare مقدار فعلی یعنی this را میفرستیم.
public int compareTo(Person person){
return compare(this,person);
}
حال درون کلاس Main با استفاده از تابع compareTo که ساختیم دوباره مقایسه را انجام میدهیم.
public static void main(String[] args) {
Person person1=new Person(1,"ali",13);
Person person2=new Person(2,"mehdi",23);
System.out.println(person2.compareTo(person1));
}
خروجی
-1
بسیار خرسندیم که با یک جلسه دیگر از این آموزش جاوا پیشرفته در خدمت شما بودیم و توانستیم به پیشرفت شما دوستان عزیز کمک کنیم. شما عزیزان میتوانید برای دسترسی بیشتر به جلسات این دوره از آموزش، آن را دانلود کنید.
امیدورایم که این جلسه از آموزش برای شما همراهان همیشگی درسمن مفید بوده باشد وخوشحال میشویم هر گونه پیشنهاد یا انتقادی دراین زمینه بود برای ما در قسمت نظرات ارسال کنید.
نظر شما در تصمیم دیگران اثرگذار است.
لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.