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 時間節約できたでしょう。