同时使用Java 8和Java 11,将以下TreeSet
与TreeSet
比较器一起考虑:
String::compareToIgnoreCase
[当我尝试删除String::compareToIgnoreCase
中存在的确切元素时,它起作用:所有指定的内容都被删除:
final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase);
languages.add("java");
languages.add("c++");
languages.add("python");
System.out.println(languages); // [c++, java, python]
但是,如果我尝试删除的内容比TreeSet
中的内容多[languages.removeAll(Arrays.asList("PYTHON", "C++"));
System.out.println(languages); // [java]
我做错了什么?为什么它的行为方式如此?
编辑:TreeSet
是有效的比较器:
TreeSet
同时使用Java 8和Java 11,请考虑以下具有String :: compareToIgnoreCase比较器的TreeSet:final Set语言=新的TreeSet <>(String :: compareToIgnoreCase); ...
languages.removeAll(Set.of("PYTHON", "C++", "LISP"));
System.out.println(languages); // [c++, java, python]
的Javadoc:此实现通过调用各自的size方法来确定此集合和指定集合中的较小者。如果此集合具有较少的元素,则实现将对此集合进行迭代,依次检查迭代器返回的每个元素,以查看其是否包含在指定的集合中。如果包含此类内容,则使用迭代器的remove方法将其从此集中删除。如果指定的集合具有较少的元素,则实现将迭代指定的集合,并使用此集合的remove方法从此集合中删除迭代器返回的每个元素。