在用.net實現最短路徑(偶以前的blog有描述)的時候,需要使用有排序功能的堆疊。但是在.net中的stack沒有排序功能,因此考慮用排序的arraylist實現。
arraylist中有乙個sort方法來實現排序功能。 其公開了乙個介面,以實現自定義的排序。如:
public
class
nodedatacomparer : icomparer
#endregion
呼叫時,使用sort(new nodedatacomparer())即可。 (在向arraylist新增資料時,新增nodedata型別物件)
這種實現方法比較簡單,但是在使用時卻發現效能比較低,是以前用vb6編寫的 1/6。 仔細想了一下,可能是由於這兩個原因:
1、在使用arraylist時,需要頻繁使用box和unboxing。
2、排序演算法的低效。
針對這兩個問題,將演算法進行了調整,即:在向arraylist中插入資料時,按中值排序演算法,計算該元素所在的位置,使用insert方法插入。 這樣就避免了使用 arraylist的sort方法,效能得到了很大的提公升(6倍以上)。 至此,完成了.net平台下gis平台的最短路徑演算法。(核心部分與gis平台無關)
建議:如果arraylist需要頻繁排序,盡量避免使用sort方法。
ArrayList非泛型集合中的排序
使用arraylist集合對字串型別和封裝類進行排序 這是封裝類 using system using system.collections.generic using system.linq using system.text using system.threading.tasks namesp...
Java 列表ArrayList排序
對任意型別集合物件進行整體排序,排序時將此介面的實現傳遞給collections.sort方法或者arrays.sort方法排序.實現int compare t o1,t o2 方法,返回正數,零,負數各代表大於,等於,小於。舉例 liststus new arraylist student stu...
Array List和ArrayList的區別與
定義 public abstract class array icloneable,ilist,icollection,ienumerable,istructuralcomparable,istructuraequatable 陣列在記憶體中是連續儲存的,所以它的索引速度是非常的快,而且賦值與修改元...