30

a から要素を削除しようとしていて、Listを取得してjava.lang.UnsupportedOperationExceptionいます。

    public <T extends Object> void findDuplicates(
        String title, Multimap<T, ChunkId> map) {
        for (T key : map.keySet()) {
            Collection<ChunkId> ids = map.get(key);
            List<ChunkId> idList = (Arrays.asList(ids.toArray(new ChunkId[0])));
            removeUsedIds(idList);
            Collections.sort(idList);
//...
        }
    }

    private void removeUsedIds(List<ChunkId> idList) {
        // decrement counter to avoid indexing changed parts of list
        for (int i = idList.size() - 1; i >= 0; i--) {
            if (usedIdSet.contains(idList.get(i))) {
                idList.remove(i);   // **** Exception thrown here
            }
        }
    }

そして私は得る

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(Unknown Source)
    at org.xmlcml.svg2xml.analyzer.PDFIndex.removeUsedIds(PDFIndex.java:104)
    at org.xmlcml.svg2xml.analyzer.PDFIndex.findDuplicates(PDFIndex.java:87)
    at org.xmlcml.svg2xml.analyzer.PDFIndex.findDuplicatesInIndexes(PDFIndex.java:129)
    at org.xmlcml.svg2xml.analyzer.PDFAnalyzer.analyzePDF(PDFAnalyzer.java:188)
    at org.xmlcml.svg2xml.analyzer.PDFAnalyzer.analyzePDFFile(PDFAnalyzer.java:115)
    at org.xmlcml.svg2xml.analyzer.PDFAnalyzer.main(PDFAnalyzer.java:398)

注: これは、Arrays.asList() によって作成された List の remove() の重複としてフラグが立てられていますが、UnsupportedOperationException をスローしますが、これは大きく異なります。その投稿者は問題が何であるかを知っており、説明を求めていました。私は問題が何であるかを知らず、現在の質問を投稿しても SO で見つけることができませんでした。Java 6 のドキュメント ( http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html ) には、問題のヒントはありません (その署名がスローされIndexOutOfBoundsExceptionます)。removeAll()この質問が参照されている間、前の質問も使用されてremove(int)いるため、字句検索はあまり正確ではありません。

したがって、私はSOに尋ね、迅速で有用な回答を得ました. (前の質問とは異なり)タイトルを正確に表現したため、他の人がこの回答を簡単に見つけることができるはずです. 1 日も経たないうちに、1 年間で前の質問とほぼ同じ数の投票 (および 100 回以上のビュー) がすでに得られており、これははるかに有用になることを示唆しています。この質問は以前の質問にリンクされているので、SO を汚染することなく一般的な有用性が増すと思います。(現在の回答は短く、不必要に情報を繰り返さないでください。)

質問を編集して無関係なコードを削除しました。問題が発生したときにこの質問があれば、1 時間節約できたでしょう。

4

3 に答える 3