Win a copy of The Way of the Web Tester: A Beginner's Guide to Automating Tests this week in the Testing forum!

# collections.binarySearch() is not working with comparable

Nakul P. Patel
Greenhorn
Posts: 25
After sorting List in ascending and descending order i want to invoke binarySearch method. But it not working as i have implemented comparable.
I could have done this by implementing comparator but i have such requirement in my project Please guide me.

K. Tsang
Bartender
Posts: 3548
16
Comparable returns a int -1, 0 or 1. Zero is equals, -1 if input1 is bigger, and 1 if input2 is bigger.

In your code, you should do a < or > comparison instead of the difference.

If you want to use the student name as comparison, you can use the string's compareTo() method.

Winston Gutkowski
Bartender
Posts: 10527
64
Nakul P. Patel wrote:After sorting List in ascending and descending order i want to invoke binarySearch method. But it not working as i have implemented comparable.

Are you sure about that? It looks to me as though you're just not calling it properly.

It's probably also worth mentioning that if you're using Comparators, you have to invoke it with the same Comparator that was used to sort.

PS: Please UseCodeTags (←click) when you post code. I've added them for you this time - See how much better it looks?

Winston

Rob Spoor
Sheriff
Posts: 20709
68
K. Tsang wrote:Comparable returns a int -1, 0 or 1. Zero is equals, -1 if input1 is bigger, and 1 if input2 is bigger.

In your code, you should do a < or > comparison instead of the difference.

Not true. The return value is < 0, 0 or > 0. The < 0 doesn't have to be -1, and the > 0 doesn't have to be 1. Unless the subtraction leads to overflow, it's a valid implementation.

Seetharaman Venkatasamy
Ranch Hand
Posts: 5575
Rob Spoor wrote:
K. Tsang wrote:Comparable returns a int -1, 0 or 1. Zero is equals, -1 if input1 is bigger, and 1 if input2 is bigger.

In your code, you should do a < or > comparison instead of the difference.

Not true.

yes , until i write -4 or 4

Rob Spoor
Sheriff
Posts: 20709
68
The "not true" was meant for the -1, 0 or 1. I shouldn't have quoted that last sentence, because you should use < and > -- not inside compareTo but for the result of it.