我正在尝试打印出两个列表之间的公共元素,以及当我尝试使用keepAll()时;它基本上跳过了所有超出的内容。
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()
返回不可调整大小的值。
将dblist
初始化替换为new ArrayList(Arrays.asList(db))
但是我不建议在retainAll
方法中使用List作为参数,这将是O(N ^ 2)复杂性。如果元素的顺序无关紧要,请对HashSet
使用medlist
。