Java 包含在树集上与另一个集上

Java 包含在树集上与另一个集上,java,collections,set,contains,binary-search,Java,Collections,Set,Contains,Binary Search,TreeSet上的contains方法(因为它已按默认值排序)是否比sayHashSet快 我问这个问题的原因是,如果对列表进行排序,Collections.binarySearch会非常快,因此我认为TreeSet的contains方法可能是相同的 来自以下的javadoc: 此实现为基本操作(添加、删除和包含)提供了有保证的日志(n)时间开销 从以下文件的javadoc: 假设散列函数将元素正确地分散在存储桶中,则该类为基本操作(添加、删除、包含和大小)提供恒定的时间性能 所以答案是否定的

TreeSet
上的contains方法(因为它已按默认值排序)是否比say
HashSet

我问这个问题的原因是,如果对列表进行排序,
Collections.binarySearch
会非常快,因此我认为TreeSet的contains方法可能是相同的

来自以下的javadoc:

此实现为基本操作(添加、删除和包含)提供了有保证的日志(n)时间开销

从以下文件的javadoc:

假设散列函数将元素正确地分散在存储桶中,则该类为基本操作(添加、删除、包含和大小)提供恒定的时间性能

所以答案是否定的

查看实现(JDK1.7Oracle),treeset.contains(resp.hashtree)依赖于treemap.containsKey(resp.hashmap)方法。containsKey在hashmap中的一个hash bucket上循环(可能只包含一个项),而它使用compareTo方法在整个map上循环,在treemap中从一个节点移动到另一个节点。如果您的项目是最大或最小的,这可能需要更多的时间


最后,我只是用一个包含1m个整数的树运行了一个快速测试(是的,我知道,不是很可靠),并查找最大的两个整数中的一个,这迫使树集浏览整个集合。哈希集快了50倍。

事实上,我想我找到了一个副本