for (Map<Character, Integer> v : vl) { flag = true; for (char c : v.keySet()) { if (!c_n.containsKey(c) || v.get(c) != c_n.get(c)) { flag = false; break; } } } 你这个flag遍历后保存的不是是最后一个V的比较值吗?只要最后一个不与当前的相同,就会加入集合。举个例子 3 abcd abcf abcd