Java中汽车数组按车型排序后Arrays.binarySearch查找失败问题
故障原因
你使用的CompareByModel比较器逻辑和查找key的构造逻辑不匹配:CompareByModel的逻辑是先按车型(model)比较,若model相同还会继续比较品牌(make)字段;但你构造查找用的key对象时,make字段传入的是空字符串""。以你测试输入的Volt为例,数组中真实存在的Volt对应make为Chevy,空字符串与Chevy的比较结果不为0,比较器会判定两个对象不相等,最终导致binarySearch命中失败。
修复方案
根据你的使用需求,有两种可选修复方式:
方案1:调整比较器仅按model字段比较(更适配你当前仅按model查找的需求)
直接修改CompareByModel的实现,仅返回model字段的比较结果即可:
class CompareByModel implements Comparator<Car> { public int compare(Car c1, Car c2) { return c1.getCarModel().compareTo(c2.getCarModel()); } }
方案2:构造key时传入正确的make字段
如果你需要保留同model下按make排序的逻辑,就需要在构造查找key时同时传入正确的make值,保证比较时两个字段都能匹配。
内容的提问来源于stack exchange,提问作者skeezyjibbs
相关产品推荐
相关产品推荐

