574 |
{ |
{ |
575 |
ListIterator itr = l.listIterator(); |
ListIterator itr = l.listIterator(); |
576 |
int i = 0; |
int i = 0; |
577 |
|
Object o = itr.next(); // Assumes list is not empty (see isSequential) |
578 |
|
boolean forward = true; |
579 |
while (low <= hi) |
while (low <= hi) |
580 |
{ |
{ |
581 |
pos = (low + hi) >> 1; |
pos = (low + hi) >> 1; |
582 |
if (i < pos) |
if (i < pos) |
583 |
for ( ; i != pos; i++, itr.next()); |
{ |
584 |
|
if (!forward) |
585 |
|
itr.next(); // Changing direction first. |
586 |
|
for ( ; i != pos; i++, o = itr.next()); |
587 |
|
forward = true; |
588 |
|
} |
589 |
else |
else |
590 |
for ( ; i != pos; i--, itr.previous()); |
{ |
591 |
final int d = compare(key, itr.next(), c); |
if (forward) |
592 |
|
itr.previous(); // Changing direction first. |
593 |
|
for ( ; i != pos; i--, o = itr.previous()); |
594 |
|
forward = false; |
595 |
|
} |
596 |
|
final int d = compare(key, o, c); |
597 |
if (d == 0) |
if (d == 0) |
598 |
return pos; |
return pos; |
599 |
else if (d < 0) |
else if (d < 0) |