Nganalisis kode sumber saka akeh proyek Java opensource, aku nemokake manawa umume pangembang mung ngurutake kanthi rong cara. Salah sijine adhedhasar panggunaan metode
sort()
kelas Collections
utawa Arrays
, lan liyane adhedhasar panggunaan struktur data ngurutake dhewe kayata TreeMap
lan TreeSet
.
Nggunakake metode sort().
Yen sampeyan kudu ngurutake koleksi, banjur gunakakeCollections.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());
}
});
Yen sampeyan kudu ngurutake array, gunakake 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());
}
});
Cara kasebut sort()
trep banget nalika koleksi utawa larik wis diisi nilai.
Nggunakake struktur data ngurutake dhewe
Yen sampeyan kudu ngurutake dhaptar (List
) utawa nyetel ( Set
), gunakake TreeSet
struktur ngurutake.
// 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);
Yen sampeyan kudu ngurutake kamus ( Map
), gunakake TreeMap
struktur ngurutake. TreeMap
diurutake miturut kunci ( 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);
Pendekatan ing ndhuwur migunani banget ing kasus sampeyan kudu nindakake akeh telusuran kanggo unsur ing koleksi. Struktur data ngurutake dhewe nduweni efisiensi O(log(n))
sing luwih apik tinimbang O(n)
. Iki tegese nalika jumlah data ing koleksi tikel kaping pindho, wektu telusuran ora tikel kaping pindho, nanging mundhak kanthi jumlah konstan .
Pendekatan ala kanggo ngurutake masalah
Sampeyan isih bisa nemokake conto ing ngendi programer nggambarake algoritma ngurutake kanthi mandiri. Coba kode ngurutake sing ditampilake ing ngisor iki (ngurutake array dobel kanthi urutan munggah ). Kode iki ora mung ora efisien, nanging uga ora bisa diwaca. Lan ana akeh conto.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