我正在尝试从 aList
和 getting中删除元素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() 的副本 throws UnsupportedOperationException但它有很大不同。那个发帖人知道问题出在哪里,想要一个解释;我不知道问题是什么,也无法通过发布当前问题在 SO 上找到它。Java 6 文档(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html)没有给出问题的提示(它的签名 throws IndexOutOfBoundsException
)。上一个问题也使用removeAll()
了,而这个问题提到的remove(int)
词法搜索不太精确。
因此,我问了 SO 并得到了快速而有用的答案。因为我准确地表述了标题(与上一个问题不同),所以其他人应该很容易找到这个答案。在不到一天的时间里,它已经获得了几乎与一年中上一个问题一样多的投票(以及 100 多个视图),这表明它将更加有用。由于这个问题现在与前一个问题相关联,我认为它在不污染 SO 的情况下增加了一般用途。(当前的答案很简短,不会不必要地重复信息。)
我已编辑问题以删除无关代码。如果在我遇到问题时这个问题已经可用,它会为我节省一个小时!