2011-04-18 84 views
1

我有一個GWT列表框,我需要按字母順序對列表框的內容(字符串)進行排序。 什麼是一個體面的方式來解決這個問題?Gwt列表框按字母排序

我正在考慮使用集合並對其進行排序或使用Arrays.sort(),然後用排序後的值填充列表框。這是一種正確的方法嗎?

感謝

+1

你從數據庫中獲取值?那麼最好在查詢本身中進行排序。 – Jai 2011-04-18 19:44:41

+0

我想你知道答案。我會這樣做,但從來沒有嘗試過。 – 2011-04-18 19:45:39

回答

5

你已經說了答案,我只是代碼它

  1. Arrays.sort列表

  2. 項目添加到列表

這裏是代碼

String[] strings = new String[] { "ab", "ac", "a", "abc" }; 
java.util.Arrays.sort(strings); 

ListBox l = new ListBox(); 

for (String s : strings) { 
    l.addItem(s); 
} 
0

當應用程序中有許多點添加到ListBox時,Presorting不起作用。您可以在更新時添加事件處理程序。僞代碼:

import com.google.gwt.event.dom.client.ChangeHandler; 

ChangeHandler sortMyList(){ 

    //extract your elements, sort, then reinsert 
} 

ListBox lb = new ListBox(); 
lb.addChangeHandler(sortMyList()); 

另一種方法是,以列表框延伸到被叫SortedListBox類這使分類爲它們插入元件。這將避免O(n^2)攤銷插入成本。

1

我做了一個輔助類下面的方法:

public static void ListBoxAddSorted(ListBox lb, String text, String value) 
    { 
     int count = lb.getItemCount(); 
     int j; 
     for (j = 0; j < count; j++ ) 
     { 
      String item = lb.getItemText(j); 
      if (item.compareTo(text) >= 0) 
      { 
       break; 
      } 
     } 

     lb.insertItem(text, value, j); 
    } 

基本上,當你插入項目到它們被插入按字母順序排列的列表。這樣您可以隨意刪除和添加,並且您的列表將始終被排序。

+0

這不適合大型列表中的性能。隨着列表的增長,找到需要插入項目的位置會變得越來越慢。 – 2016-02-18 08:20:33