Java问题:Collections中的binarySearch方法只支持字符串元素对吗?

图片说明

图中这个arr对象的元素,有int,double,布尔,String各类型,我都试了下,只有String可以显示出来结果,其他几个都报错,那么我由此得出结论:此方法只针对字符串类型,我这个结论是正确的吗?求证一下,我不想因不正确的测试方法而误导了自己

另外,下面这俩方法有啥区别呢?
图片说明

关键在于类型不一致,第一个能查找不报错是凑巧了,内部是二分查找,所以刚好第一个匹配了,如果类型不匹配,也照样报错。
如,你在addAll后面在增加1,3,4,再查找“蔡”,也会报错的。

确切地说,只支持引用类型。除了string,也支持Integer外覆类,自己定义的类等

我的理解是支持封装数据类型。你把0.34对应的数据类型改成Float或者是Double试试。

道理很简单,int float等简单类型,是值类型,只有值,没有地址,那么如果出现重复,怎么查找呢

主要是类型不一致才对,看api就知道,Collections.addAll()和Collections.binarySearch()接收的第一个参数就是List泛型,并且该类型是实现了
Comparable接口的方便进行排序,List元素类型必须保持一致,不然就不认了。

你的ArrayList没有使用泛型,所以存入 ArrayList中的元素都被视为Object类型,int i=Collections.binarySearch(arr,"蔡");这条语句,实际是调用String类的compareTo方法与ArrayList中的元素逐一比较来查找元素,所以会把ArrayList中的元素强制转化为String类型,所以你这条语句不会出现问题。而接下来的语句 int i=Collections.binarySearch(arr,0.34);这条语句中,0.34是double类型,会被自动打包成包装类Double,然后调用Double的 compareTo方法与ArrayList中的元素逐一比较来查找元素,所以会把ArrayList中的元素强制转化为 Double 类型,而String类无法转换为 Double类型,因此出错。