From 093942ac675fab472ce829446c86b8233f25ee1d Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 23 Sep 2004 18:01:46 +0000 Subject: 2004-09-23 Mark Wielaard * java/util/Collections.java (binarySearch(List, Object, Comparator)): Explicitly reverse direction in list iterator. (rotate): Just return when list is empty. From-SVN: r87970 --- libjava/java/util/Collections.java | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'libjava/java') diff --git a/libjava/java/util/Collections.java b/libjava/java/util/Collections.java index 7e5ac6e..d50563c 100644 --- a/libjava/java/util/Collections.java +++ b/libjava/java/util/Collections.java @@ -574,14 +574,26 @@ public class Collections { ListIterator itr = l.listIterator(); int i = 0; + Object o = itr.next(); // Assumes list is not empty (see isSequential) + boolean forward = true; while (low <= hi) { pos = (low + hi) >> 1; if (i < pos) - for ( ; i != pos; i++, itr.next()); + { + if (!forward) + itr.next(); // Changing direction first. + for ( ; i != pos; i++, o = itr.next()); + forward = true; + } else - for ( ; i != pos; i--, itr.previous()); - final int d = compare(key, itr.next(), c); + { + if (forward) + itr.previous(); // Changing direction first. + for ( ; i != pos; i--, o = itr.previous()); + forward = false; + } + final int d = compare(key, o, c); if (d == 0) return pos; else if (d < 0) @@ -1110,6 +1122,8 @@ public class Collections public static void rotate(List list, int distance) { int size = list.size(); + if (size == 0) + return; distance %= size; if (distance == 0) return; -- cgit v1.1