There appears to be redundant computaions in "ObservableList.retainAll"
methods in version 2.4.6. I have attached a test and proposed a small
patch which ensures that "contains" method is called on hashset of
input collection. This patch gives 1739X speed up on my
machine for the provided test.
Also, one more possibility to fix the issue is by using TreeSet as suggested in
https://issues.apache.org/jira/browse/GROOVY-5739 as well.
Similar patches can be applied for three other methods, ObservableList.removeAll, ObservableSet.retainAll, ObservableSet.removeAll.