我正在尝试打印出两个列表之间的公共元素,以及当我尝试使用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输出的末尾。
答案 0 :(得分:5)
您有UnsupportedOperationException。
由于retainAll
调整了大小,而Arrays.asList()
返回的则无法调整大小。
用dblist
代替new ArrayList(Arrays.asList(db))
初始化
但是我不建议在retainAll
方法中使用List作为参数,这将是O(N ^ 2)复杂性。如果元素的顺序无关紧要,请将HashSet
用于medlist
。