بہت سے اوپن سورس جاوا پروجیکٹس کے سورس کوڈ کا تجزیہ کرتے ہوئے، میں نے پایا کہ زیادہ تر ڈویلپر صرف دو مختلف طریقوں سے چھانٹی کو نافذ کرتے ہیں۔
sort()
ان میں سے ایک کلاس کے طریقہ کار Collections
یا کے استعمال پر مبنی ہے Arrays
، اور دوسرا خود کو چھانٹنے والے ڈیٹا ڈھانچے جیسے کہ TreeMap
اور کے استعمال پر مبنی ہے TreeSet
۔
sort() طریقہ استعمال کرنا
اگر آپ کو کسی مجموعہ کو ترتیب دینے کی ضرورت ہے، تو استعمال کریںCollections.sort()
۔
// Collections.sort(…)
List<ObjectName> list = new ArrayList<ObjectName>();
Collections.sort(list, new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
اگر آپ کو کسی صف کو ترتیب دینے کی ضرورت ہے تو، استعمال کریں Arrays.sort()
۔
// Arrays.sort(…)
ObjectName[] arr = new ObjectName[10];
Arrays.sort(arr, new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
یہ طریقہ sort()
بہت آسان ہے جب مجموعہ یا صف پہلے سے ہی اقدار سے بھری ہوئی ہو۔
خود چھانٹنے والے ڈیٹا ڈھانچے کا استعمال
اگر آپ کو فہرست (List
) یا سیٹ ( Set
) کو ترتیب دینے کی ضرورت ہے، تو TreeSet
ترتیب دینے والا ڈھانچہ استعمال کریں۔
// TreeSet
Set<ObjectName> sortedSet = new TreeSet<ObjectName>(new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
sortedSet.addAll(unsortedSet);
اگر آپ کو لغت ( Map
) کو ترتیب دینے کی ضرورت ہو تو TreeMap
ترتیب دینے والی ساخت کا استعمال کریں۔ TreeMap
کلید کے لحاظ سے ترتیب دیا گیا ( key
)
// TreeMap – использующий String ключи и компаратор (Comparator) CASE_INSENSITIVE_ORDER,
// упорядочивающий строки (String) методом compareToIgnoreCase
Map<String, Integer> sortedMap = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
sortedMap.putAll(unsortedMap);
//TreeMap – общий случай, компаратор указывается вручную
Map<ObjectName, String> sortedMap = new TreeMap<ObjectName, String>(new Comparator<ObjectName>() {
public int compare(ObjectName o1, ObjectName o2) {
return o1.toString().compareTo(o2.toString());
}
});
sortedMap.putAll(unsortedMap);
مندرجہ بالا نقطہ نظر ان صورتوں میں بہت مفید ہے جہاں آپ کو ایک مجموعہ میں عناصر کے لیے بڑی تعداد میں تلاش کرنے کی ضرورت ہے۔ خود چھانٹنے والے ڈیٹا ڈھانچے میں ایک ایسی کارکردگی ہے O(log(n))
جو اس سے بہتر ہے O(n)
۔ اس کا مطلب یہ ہے کہ جب جمع کرنے میں ڈیٹا کی مقدار دوگنی ہوجاتی ہے، تو تلاش کا وقت دوگنا نہیں ہوتا، بلکہ ایک مستقل رقم سے بڑھ جاتا ہے ۔
مسئلہ کو چھانٹنے کا غلط طریقہ
آپ اب بھی ایسی مثالیں تلاش کر سکتے ہیں جہاں پروگرامرز آزادانہ طور پر الگورتھم کی ترتیب کو بیان کرتے ہیں۔ ذیل میں پیش کردہ چھانٹنے والے کوڈ پر غور کریں (صعودی ترتیب میں ڈبل صف کو ترتیب دینا )۔ یہ کوڈ نہ صرف ناکارہ ہے بلکہ پڑھنے کے قابل بھی نہیں ہے۔ اور ایسی بہت سی مثالیں ہیں۔double t;
for (int i = 0; i < N; i++)
for (int j = i + 1; j < N; j++)
if (r[j] < r[i]) {
t = r[i];
r[i] = r[j];
r[j] = t;
}
GO TO FULL VERSION