我正在尝试打印两个列表之间的公共(public)元素,并且当我尝试使用retainAll();时它基本上会跳过之后的所有内容。
List<String> dblist = Arrays.asList(db);
List<String> medlist = Arrays.asList(medication);
//Get Meds in Database that Match Patient Meds
jTextArea3.append("\nMedications in dblist :"+"\n");
for (int d =0; d<dblist.size(); d++){
jTextArea3.append(dblist.get(d)+"\n");
}
jTextArea3.append("\nMedications in medlist :"+"\n");
for (int d =0; d<medlist.size(); d++){
jTextArea3.append(medlist.get(d)+"\n");
}
//dblist.retainAll(medlist);
jTextArea3.append("\nMedications in both :"+"\n");
for (int d =0; d<dblist.size(); d++){
jTextArea3.append(dblist.get(d)+"\n");
}
这将列出 dblist.get(d) 的内容,但是一旦我取消注释 dblist.retainAll(medlist),输出就会在上面的 medlist 输出的末尾停止。
最佳答案
您遇到了 UnsupportedOperationException。
因为 retainAll
会调整集合的大小,而 Arrays.asList()
返回不可调整大小的集合。
用 new ArrayList(Arrays.asList(db)) 替换
dblist
初始化
但我不建议在 retainAll
方法中使用 List 作为参数,这将是 O(N^2) 复杂度。如果元素顺序无关紧要,请使用 HashSet
作为 medlist
。
关于java - 列出 Java 中的常见元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54755670/