Көптөгөн ачык булактуу Java долбоорлорунун баштапкы codeун талдоодо, мен көпчүлүк иштеп чыгуучулар сорттоону эки гана башка жол менен ишке ашырарын байкадым.
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)
. Бул коллекциядагы маалыматтардын көлөмү эки эсеге көбөйгөндө, издөө убактысы эки эсеге көбөйбөйт, бирок туруктуу көлөмгө көбөйөт дегенди билдирет .
Көйгөйдү сорттоого туура эмес мамиле
Сиз дагы эле программисттер сорттоо алгоритмдерин өз алдынча сүрөттөгөн мисалдарды таба аласыз. Төмөндө берилген сорттоо codeун карап көрүңүз (кош массивди өсүү тартибинде сорттоо ) . Бул code натыйжасыз гана эмес, окууга да мүмкүн эмес. Жана мындай мисалдар көп.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