0

時間範囲のリスト (開始時間と終了時間を持つ Time[] 配列として表される) を開始時間で並べ替えようとしています。私はそうするために次のネストされたループを使用しようとしています:

            for (Time[] span : workingList){
            Time[] compareTo = workingList.get(0);

                for (Time[] inSpan : workingList){
                    if (inSpan[0].before(compareTo[0])){
                    compareTo = inSpan;
                    }
                }
            workingList.remove(compareTo);
            toReturn.add(compareTo);
        }

    }

java.util.ConcurrentModificationExceptionしかし、それはラインfor (Time[] span : workingList)(一番上のもの)に投げています。私はこれまでこの例外を見たことがありません.誰かが私にそれが何を意味し、何が原因であるかを説明してもらえますか.

このためのより良いアルゴリズムの提案も受け付けています。

4

2 に答える 2

6
workingList.remove(compareTo);

コレクションを反復しながらコレクションを変更しています。

次のようなものを使用する必要があります。

ListIterator<Time[]> it = workingList.listIterator();

while (it.hasNext()) {
  Time[] time = it.next();
  ..
  it.remove();
}

リスト反復子を使用しない方法もありますが、これはより正しいようです。

于 2013-03-16T01:04:48.073 に答える
1

私の提案は、Collections.sort()リストの注文に使用することです。それはあなたのためにソートを行い、あなたがやろうとしていることをはるかに読みやすくします。メソッドを呼び出すときは、独自に指定する必要がありますComparator-そのように:

    Collections.sort(workingList,new Comparator<Time[]>() {
        @Override
        public int compare(Time[] time1, Time[] time2) {
            return time1[0].before(time2[0]);
        }
    });

これにより、workingListが仕様として並べ替えられます。

于 2013-03-16T01:17:04.140 に答える