SWT でテーブル ウィジェットに並べ替えを追加しようとしています。Snippet2 sortListenerHandler からコードをコピーしても機能しません。2 つの項目を正しく並べ替えて並べ替えます。テーブルに 2 つ以上の項目があり、結果は予測できません。
私には (次の Snippet2 から抽出したコードでsortListener) 、外側の for ループで繰り返し処理している呼び出された項目  のitems[i].dispose()配列を変更しようとしているように思えます。アレイ全体が新たに再作成されます。それは確かに反復を壊しますか?TableItemsfor (int i = 1 ......disposed()
だから、私は2つの質問があると思います:
- Snippet2 のアルゴリズムについて理解していないことは何ですか?
 - ソート操作がランダムな結果を返す可能性がある他の明らかな理由はありますか?
 
これが私のコードです:
Listener sortListener = new Listener() {
    public void handleEvent(Event e) {
        TableItem[] items = table.getItems();
        Collator collator = Collator.getInstance(Locale.getDefault());
        TableColumn column = (TableColumn)e.widget;
        int index = column == column1 ? 0 : 1;
        for (int i = 1; i < items.length; i++) {                <--------- HERE
            String value1 = items[i].getText(index);
            for (int j = 0; j < i; j++){
                String value2 = items[j].getText(index);
                if (collator.compare(value1, value2) < 0) {
                    String[] values = {items[i].getText(0), items[i].getText(1)};
                    items[i].dispose();                         <--------- HERE
                    TableItem item = new TableItem(table, SWT.NONE, j);
                    item.setText(values);
                    items = table.getItems();                   <--------- HERE
                    break;
                }
            }
        }
        table.setSortColumn(column);
    }
};