Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表的二进制搜索,而不是集合的二进制搜索_Java_Collections - Fatal编程技术网

Java 列表的二进制搜索,而不是集合的二进制搜索

Java 列表的二进制搜索,而不是集合的二进制搜索,java,collections,Java,Collections,在集合中是: binarySearch(List list, Object key) 为什么二进制搜索不适用于Set?为什么它只适用于列表 有什么特别的原因吗?一个集合是无序的,并且它所包含的元素没有索引。因此,返回元素索引的binarySearch()方法没有意义。二进制搜索意味着一个已排序的容器。一个集合要么是无序的(HashSet),在这种情况下无法执行二进制搜索,要么是有序的(TreeSet),在这种情况下,它的查找操作已经和二进制搜索一样有效(即O(Log2(N)))。在这种情况下,

集合中
是:

binarySearch(List list, Object key)
为什么二进制搜索不适用于
Set
?为什么它只适用于
列表


有什么特别的原因吗?

一个集合是无序的,并且它所包含的元素没有索引。因此,返回元素索引的binarySearch()方法没有意义。

二进制搜索意味着一个已排序的容器。一个集合要么是无序的(
HashSet
),在这种情况下无法执行二进制搜索,要么是有序的(
TreeSet
),在这种情况下,它的查找操作已经和二进制搜索一样有效(即
O(Log2(N))
)。

在这种情况下,只有对列表进行排序和排序,二进制搜索才会起作用。i、 它不适用于所有列表,只适用于预排序的列表

集合未排序,可能无法排序


如果集合已排序,则可以使用NavigableSet的方法之一对有序集合进行二进制搜索。
套装未订购。

感谢大家的快速响应。我从所有的回复中了解到,binarySearch只能用于有序集合。但是如果我想用树集呢?难道不可能吗?是否有其他类似于二进制搜索的方法从集合中搜索对象?您可以将集合转换为有序集合。
TreeSet
可能是有序的,但您不能通过索引引用其元素。据我所知,您希望在TreeSet中搜索。TreeSet实现为基本操作(添加、删除和包含)(dixit文档)提供了有保证的日志(n)时间成本。我想它已经使用binarySearch了!(我声称这一点时没有看到消息来源)。