Sa pagsusuri sa source code ng maraming opensource Java na proyekto, nalaman kong karamihan sa mga developer ay nagpapatupad ng pag-uuri sa dalawang magkaibang paraan lamang. Ang isa sa mga ito ay batay sa paggamit ng paraan ng
sort()
klase Collections
o Arrays
, at ang isa pa ay batay sa paggamit ng mga istruktura ng data sa pag-uuri-buo ng sarili tulad ng TreeMap
at TreeSet
.
Gamit ang sort() method
Kung kailangan mong pag-uri-uriin ang isang koleksyon, pagkatapos ay gamitin angCollections.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());
}
});
Kung kailangan mong pag-uri-uriin ang isang array, gamitin ang 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());
}
});
Ang pamamaraan sort()
ay napaka-maginhawa kapag ang koleksyon o array ay napuno na ng mga halaga.
Paggamit ng sariling pag-uuri ng mga istruktura ng data
Kung kailangan mong pag-uri-uriin ang isang listahan (List
) o itakda ( Set
), gumamit ng TreeSet
istraktura ng pag-uuri.
// 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);
Kung kailangan mong pag-uri-uriin ang isang diksyunaryo ( Map
), gumamit ng TreeMap
istraktura ng pag-uuri. TreeMap
pinagsunod-sunod ayon sa susi ( 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);
Ang diskarte sa itaas ay lubhang kapaki-pakinabang sa mga kaso kung saan kailangan mong magsagawa ng malaking bilang ng mga paghahanap para sa mga elemento sa isang koleksyon. Ang mga istruktura ng data na nag-uuri-uri sa sarili ay may kahusayan O(log(n))
na mas mahusay kaysa sa O(n)
. Nangangahulugan ito na kapag dumoble ang dami ng data sa koleksyon, hindi dumodoble ang oras ng paghahanap, ngunit tataas ng pare-parehong halaga .
Masamang diskarte sa pag-uuri ng problema
Makakahanap ka pa rin ng mga halimbawa kung saan independiyenteng inilalarawan ng mga programmer ang mga algorithm ng pag-uuri. Isaalang-alang ang sorting code na ipinakita sa ibaba (pag-uuri ng double array sa pataas na pagkakasunod-sunod ). Ang code na ito ay hindi lamang hindi mahusay, ngunit hindi rin nababasa. At mayroong maraming tulad na mga halimbawa.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