You can create a Map wich maps an id to a collection of values;
Map:
1 => { AAA, ABC }
2 => { dasd, dsfdsf, dsfsd }
...
This will have an efficient lookup time of O(1). You can do the binary search as well, but lookups will be less efficient.
Binary search algorithm:
First you create a sorted list (arraylist, linkedlist, etc). It must be sorted on the id. Then you do a standard binary search to find one element that matches id. Then you traverse both upwards and downwards the list until element does not match id. This will find all objects with the given id.
Example list:
List Index, Object
0 Id=1 Value=A
1 Id=2 Value=B
2 Id=2 Value=C
3 Id=3 Value=D
4 Id=3 Value=E
Binary search returns index 2. Now loop downwards will first find element 1: Id=2 which matches, then element 0: Id=1 which does not match and therefore terminates the downward loop. The upward loop first finds element 3: Id=3 which does not match. This terminates the upward loop.