Rechercher dans la liste sortingée pour plus proche et moins de

Considérons certains long appelés X et une List sortingée List . Quel est l’algorithme le plus efficace pour trouver l’indice ou la valeur dans la List qui est (i) inférieur à X et (ii) le plus proche de X sur la droite numérique (en supposant que la condition (i) a été définie)?

Par exemple, cela pourrait être un problème d’installation:

 long X = 500; List foo = new Arraylist(); foo.add(450L); foo.add(451L); foo.add(499L); foo.add(501L); foo.add(550L); Collections.sort(foo); // It's always sorted. 

Je voudrais que l’algorithme retourne 499 ou renvoie l’index associé à 499 (dans ce cas, i=2 ).