ایک صف یا مجموعہ میں ذخیرہ کردہ ایک ہی قسم کی اشیاء کو منظم کرنے کے لیے، جاوا ڈویلپرز کے ساتھ آئے
اشیاء کی صفوں کو ترتیب دینے کا ایک آسان اور مؤثر طریقہ
Comparable
۔ یہ صرف ایک طریقہ کا اعلان کرتا ہے compareTo
:
public interface Comparable<T> {
public int compareTo(T o);
}
ایک انٹرفیس کو اس Comparable
چیز کی قسم سے پیرامیٹرائز کیا جاتا ہے جسے وہ طریقہ کے پیرامیٹر کے طور پر قبول کرتا ہے compareTo
۔ اس صورت میں، ہم مرتب کرنے والے کو متنبہ کرتے ہیں کہ ہم کس قسم کی اشیاء کا موازنہ کرنے جا رہے ہیں۔ اگر قسم کی شناخت کی شرط پوری نہیں ہوتی ہے تو ہمیں ایک غلطی موصول ہوگی ClassCastException
۔ جاوا میں ایک طریقہ compareTo
کالنگ آبجیکٹ کا پیرامیٹر کے طور پر پاس کردہ آبجیکٹ سے موازنہ کرتا ہے اور موازنہ کے نتیجے میں ایک عدد واپس کرتا ہے:
- مثبت اگر کالنگ آبجیکٹ پیرامیٹر کے طور پر پاس کردہ آبجیکٹ سے بڑا ہو؛
- منفی اگر کالنگ آبجیکٹ پیرامیٹر کے طور پر پاس کردہ آبجیکٹ سے چھوٹا ہو؛
- null اگر اشیاء برابر ہوں۔
جاوا میں compareTo طریقہ کی ضرورت کیوں ہے؟
جاوا پروگرامر کو اکثر اشیاء کی صفوں اور فہرستوں سے نمٹنا پڑتا ہے۔ بڑی مقدار میں ڈیٹا کے ساتھ کام کرتے وقت، اسے منظم یا ترتیب شدہ شکل میں ذخیرہ کرنا اکثر آسان ہوتا ہے۔ سب سے پہلے، یہ ضروری معلومات کی تلاش کے دوران جمع کرنے کے ساتھ کام کرنے کی رفتار کو تیز کرتا ہے، اور دوسرا، منظم ڈیٹا کو بصری طور پر بہتر سمجھا جاتا ہے۔sort()
کلاس طریقہ ہے Arrays
، اور فہرست کی شکل میں اشیاء کا مجموعہ اسی طرح کا کلاس طریقہ ہے Collections
۔ ان طریقوں کو استعمال کرتے ہوئے ترتیب دینے کے لیے، جاوا کے ڈویلپرز نے ہمیں یہ انتخاب کرنے کی آزادی دی کہ کس طرح چھانٹنے کے معیار کی وضاحت کی جائے: Comparable
ان اشیاء کی کلاس میں انٹرفیس کو لاگو کرکے جسے ہم چھانٹنا چاہتے ہیں، یا استعمال کرکے Comparator
۔ پہلی صورت میں، ترتیب دینے کے طریقے ایک صف یا فہرست کی شکل میں اشیاء کے سیٹ کو قبول کرتے ہیں:
sort(T[]array)//sorting массива
sort(List<T> list)// sorting списка
اور دوسرے میں - پلس انٹرفیس کا ایک اور نفاذ Comparator
:
sort(T[]array, Comparator <? super T> comparator)//sorting массива
sort(List<T> list, Comparator <? super T> comparator)// sorting списка
انٹرفیس Comparable
اس وقت استعمال ہوتا ہے جب ہم چھانٹتے وقت اشیاء کی قدرتی (ہمارے نقطہ نظر سے سب سے زیادہ منطقی) ترتیب ترتیب دینا چاہتے ہیں۔ یہ ڈیزائن کے مرحلے پر اس کلاس کی اشیاء کا موازنہ کرنے کے لیے الگورتھم کو "ہارڈ وائر" کرنے کا ایک طریقہ بھی ہے۔ مثال کے طور پر ، اس انٹرفیس کے نفاذ کا استعمال کرتے ہوئے، بنیادی قدیم اقسام کی ریپر کلاسز میں قدرتی ترتیب کے معیار کی وضاحت کی گئی ہے: , Byte
, Character
, Long
, Integer
, Short
, Double
, Float
. اس کا مطلب یہ بھی ہے کہ ان کلاسز کے پاس ایک نافذ شدہ طریقہ ہے جسے ہم پروگرام میں استعمال کر سکتے ہیں اگر ضروری ہو تو۔ آئیے سٹرنگ موازنے کی ایک مثال دیکھیں کہ یہ طریقہ کلاس میں کیسے لاگو ہوتا ہے ۔ Boolean
String
compareTo
String
String str1="Аарон";
String str2="АAPOH";
String str3="аарон";
String str4="ААрон";
String str5="аАрон";
String str6="Берта";
String str7="берта";
String[] allStr=new String[]{str1,str2,str3,str4, str5,str6, str7};
Arrays.sort(allStr);
for (String s:allStr){
System.out.println(s);
}
}
اگر ہم اس کوڈ کو طریقہ کار میں چلاتے ہیں main
تو ہمیں درج ذیل نتیجہ ملے گا:
АAPOH
ААрон
Аарон
Берта
аАрон
аарон
берта
جیسا کہ آپ کلاس میں مثال میں دیکھ سکتے ہیں String
، یہ طریقہ compareTo
تاروں کو حروف تہجی کے لحاظ سے، لغت کے لحاظ سے اور کیس کے لحاظ سے ترتیب دیتا ہے۔ یہ سٹرنگ موازنہ کا یہ حکم ہے جسے کلاس کے ڈویلپرز نے String
قدرتی طور پر بیان کیا ہے۔ لغت کی ترتیب کیا ہے اس کی آسان تفہیم کے لیے، یہ یاد رکھنا کافی ہے کہ زبان کی لغات میں الفاظ کو کس طرح ترتیب دیا جاتا ہے۔ اعداد کا موازنہ کرتے وقت ، اشیاء کو صعودی ترتیب میں ترتیب دیا جاتا ہے۔ یہ موازنہ منطق کلاسز میں سرایت کر گئی ہے Byte
, Character
, Long
, Integer
, Shor
, . Double
Float
آئیے اپنی کلاس میں موازنہ کو لاگو کریں۔
آئیے ایک مثال دیکھیں کہ آپ اپنی کلاس میں اشیاء کا موازنہ کرنے کی صلاحیت کیسے پیدا کر سکتے ہیں۔ جاوا کے طریقہ کار کو لاگو کرتے وقتcompareto
، ہم اشیاء کو آرڈر کرنے کے لیے ایک یا زیادہ معیارات بتا سکتے ہیں، اور اور کلاسز compareto
کے طریقے بھی استعمال کر سکتے ہیں ۔ مثال کے طور پر، کلاس اشیاء کے لیے ہم نام کے لحاظ سے ترتیب دیتے ہیں، اور مساوی ناموں کی صورت میں، عمر کے لحاظ سے۔ اشیاء کو ان کی فطری ترتیب میں ترتیب دیا جائے گا (جیسا کہ قدر بڑھتی ہے)۔ کلاس : String
Integer
User
User
public class User implements Comparable <User>{//добавляем возможность сравнивать an objectы User
private String name;
private Integer age;
private String email;
public User(String name, int age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
@Override
//реализуем метод compareTo интерфейса Comparable
public int compareTo(User o) {
//используем метод compareTo из класса String для сравнения имен
int result = this.name.compareTo(o.name);
//если имена одинаковые - сравниваем возраст,
используя метод compareTo из класса Integer
if (result == 0) {
result = this.age.compareTo(o.age);
}
return result;
}
@Override
public String toString() {
return "{" +
"name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
'}';
}
آئیے کلاس میتھڈ کا استعمال کرتے ہوئے compareTo
کلاس میں لاگو طریقہ کار کے آپریشن کی جانچ کرتے ہیں : User
sort
Collections
public static void main(String[] args) {
User user = new User("Andrey", 19, "andryha@mail.ru");
User user2 = new User("Олег", 25, "oleg@mail.ru");
User user3 = new User("Andrey", 24,"opr@google.com");
User user4 = new User("Igor", 16, "igor@mail.ru");
User user5 = new User("Andrey", 44,"stary@google.com");
List<User> list = new ArrayList<>();
list.add(user);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
System.out.println("-------до сортировки--------");
for (User u : list) {
System.out.println(u);
}
System.out.println("-------после сортировки-----");
Collections.sort(list);
for (User u : list) {
System.out.println(u);
}
}
}
}
طریقہ کار کا نتیجہ main
:
-------до сортировки--------
{name='Андрей', age=19, email='andryha@mail.ru'}
{name='Олег', age=25, email='oleg@mail.ru'}
{name='Андрей', age=24, email='opr@google.com'}
{name='Игорь', age=16, email='igor@mail.ru'}
{name='Андрей', age=44, email='stary@google.com'}
-------после сортировки-----
{name='Андрей', age=19, email='andryha@mail.ru'}
{name='Андрей', age=24, email='opr@google.com'}
{name='Андрей', age=44, email='stary@google.com'}
{name='Игорь', age=16, email='igor@mail.ru'}
{name='Олег', age=25, email='oleg@mail.ru'}
تو، آئیے خلاصہ کرتے ہیں۔ اگر آپ ہر چیز میں ترتیب کے حامی ہیں اور اپنی اشیاء کو غیر ضروری کوڈ کے بغیر کسی صف یا فہرست میں ترتیب دینا چاہتے ہیں تو انٹرفیس استعمال کریں Comparable
۔ اس کے compareTo طریقہ کا نفاذ آپ کی کلاس میں قدرتی طور پر اشیاء کو ترتیب دینے کے لیے ایک طریقہ کار بنانا کافی آسان بناتا ہے۔ compareTo
اگر آپ کو جاوا لائبریری میں بیان کردہ معیاری کلاسوں کی اشیاء کے مجموعوں اور صفوں کے ساتھ کام کرنا ہے، تو ان کلاسوں میں ریڈی میڈ نفاذ کا استعمال کریں ۔
GO TO FULL VERSION