我正在尝试打印出两个列表之间的公共元素,以及当我尝试使用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

10-05 18:02