Ko'pgina ochiq manbali Java loyihalarining manba kodini tahlil qilib, men ko'pchilik ishlab chiquvchilar saralashni faqat ikki xil usulda amalga oshirishini aniqladim.
sort()
Ulardan biri sinf usuli Collections
yoki dan foydalanishga , ikkinchisi esa va Arrays
kabi o'z-o'zidan saralanadigan ma'lumotlar tuzilmalaridan foydalanishga asoslangan . TreeMap
TreeSet
Sort() usulidan foydalanish
Agar to'plamni saralash kerak bo'lsa, dan foydalaningCollections.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());
}
});
Agar massivni saralash kerak bo'lsa, dan foydalaning 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()
To'plam yoki massiv allaqachon qiymatlar bilan to'ldirilgan bo'lsa, usul juda qulaydir.
O'z-o'zidan saralanadigan ma'lumotlar tuzilmalaridan foydalanish
Agar roʻyxatni saralash (List
) yoki ( Set
) oʻrnatish kerak boʻlsa, TreeSet
tartiblash tuzilmasidan foydalaning.
// 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);
Agar lug'atni saralash kerak bo'lsa ( Map
), tartiblash tuzilmasidan foydalaning TreeMap
. TreeMap
kaliti ( ) bo'yicha tartiblangan 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);
Yuqoridagi yondashuv to'plamdagi elementlar uchun ko'p sonli qidiruvlarni amalga oshirish kerak bo'lgan hollarda juda foydali. O(log(n))
O'z-o'zidan saralanadigan ma'lumotlar tuzilmalari dan yaxshiroq samaradorlikka ega O(n)
. Bu shuni anglatadiki, to'plamdagi ma'lumotlar miqdori ikki baravar ko'payganda, qidiruv vaqti ikki baravar ko'paymaydi, balki doimiy miqdorga oshadi .
Muammoni tartiblash uchun noto'g'ri yondashuv
Siz hali ham dasturchilar tartiblash algoritmlarini mustaqil ravishda tasvirlaydigan misollarni topishingiz mumkin. Quyida keltirilgan saralash kodini ko'rib chiqing (qo'sh massivni o'sish tartibida tartiblash ) . Ushbu kod nafaqat samarasiz, balki o'qilmaydi ham. Va bunday misollar juda ko'p.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