Je me demande comment vous pourriez écrire une méthode java simple pour trouver le placard Integer à une valeur donnée dans une liste entière triée.Trouver la valeur la plus proche dans une liste ordererd
Voici ma première tentative:
public class Closest {
private static List<Integer> integers = new ArrayList<Integer>();
static {
for (int i = 0; i <= 10; i++) {
integers.add(Integer.valueOf(i * 10));
}
}
public static void main(String[] args) {
Integer closest = null;
Integer arg = Integer.valueOf(args[0]);
int index = Collections.binarySearch(
integers, arg);
if (index < 0) /*arg doesn't exist in integers*/ {
index = -index - 1;
if (index == integers.size()) {
closest = integers.get(index - 1);
} else if (index == 0) {
closest = integers.get(0);
} else {
int previousDate = integers.get(index - 1);
int nextDate = integers.get(index);
if (arg - previousDate < nextDate - arg) {
closest = previousDate;
} else {
closest = nextDate;
}
}
} else /*arg exists in integers*/ {
closest = integers.get(index);
}
System.out.println("The closest Integer to " + arg + " in " + integers
+ " is " + closest);
}
}
Que pensez-vous de cette solution? Je suis sûr qu'il ya une façon plus propre de faire ce travail ...
Peut-être qu'une telle méthode existe quelque part dans les bibliothèques Java et je l'ai manqué ??
Manu
Je pense que ce code est élégant, mais pas tout à fait aussi vite que le code d'origine, parce que vous devez créer un nouvelle liste pour chaque appel de méthode. – Galghamon
corrigé merci :-) – dfa
Un avantage majeur de cet algorithme est qu'il ne nécessite pas de 'List' à trier (comme ce serait le cas si 'Collections.binarySearch (..)' est utilisé). –