【问题标题】:Gwt ListBox Alphabetical OrderGwt ListBox 字母顺序
【发布时间】:2014-01-30 19:36:45
【问题描述】:

我有一个 GWT 列表框,我需要按字母顺序对列表框的内容(字符串)进行排序。 有什么好的方法可以解决这个问题?

我正在考虑使用 Collection 和 Sort 或使用 Arrays.sort() 然后用排序值填充列表框。这是正确的方法吗?

谢谢

【问题讨论】:

  • 您是否从数据库中获取值?然后最好在查询本身中对其进行排序。
  • 我想你知道答案了。我也会这样做,但以前从未尝试过。

标签: java gwt listbox


【解决方案1】:

你已经说了答案,我只是编码

  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);
}

【讨论】:

    【解决方案2】:

    我在辅助类中做了以下方法:

    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 );
        }
    

    基本上,当您将项目插入列表时,它们会按字母顺序插入。这样您可以随意删除和添加,您的列表将始终被排序。

    【讨论】:

    • 这不适合在更大列表中的性能。随着列表的增长,查找需要插入项目的位置变得越来越慢。
    【解决方案3】:

    当您在应用程序中有很多点将内容添加到 ListBox 时,预排序不起作用。您可以在更新时添加事件处理程序。伪代码:

    import com.google.gwt.event.dom.client.ChangeHandler;
    
    ChangeHandler sortMyList(){
    
        //extract your elements, sort, then reinsert
    }
    
    ListBox lb = new ListBox();
    lb.addChangeHandler( sortMyList());
    

    另一种选择是将 ListBox 扩展为一个名为 SortedListBox 的类,该类在插入元素时保持元素的排序。这将避免 O(n^2) 摊销插入成本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多