Ҳангоми таҳлor рамзи сарчашмаи бисёр лоиҳаҳои Java-и кушода, ман фаҳмидам, ки аксари таҳиягарон навъбандиро танҳо бо ду роҳи гуногун амалӣ мекунанд. Яке аз онҳо ба истифодаи усули
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 на танҳо бесамар, балки хондан ҳам ғайриимкон аст. Ва ин гуна мисолхо бисьёранд.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