Skip to content

Commit a2604a8

Browse files
committed
Replace LinkedList with ArrayDeque
1 parent 0fc6e2c commit a2604a8

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

rxjava-core/src/main/java/rx/operators/OperatorSkipLast.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
*/
1616
package rx.operators;
1717

18+
import java.util.ArrayDeque;
1819
import java.util.Deque;
19-
import java.util.LinkedList;
2020

2121
import rx.Observable.Operator;
2222
import rx.Subscriber;
@@ -38,10 +38,13 @@ public OperatorSkipLast(int count) {
3838
@Override
3939
public Subscriber<? super T> call(final Subscriber<? super T> subscriber) {
4040
return new Subscriber<T>(subscriber) {
41+
42+
private final NotificationLite<T> on = NotificationLite.instance();
43+
4144
/**
4245
* Store the last count elements until now.
4346
*/
44-
private final Deque<T> deque = new LinkedList<T>();
47+
private final Deque<Object> deque = new ArrayDeque<Object>();
4548

4649
@Override
4750
public void onCompleted() {
@@ -62,14 +65,10 @@ public void onNext(T value) {
6265
subscriber.onNext(value);
6366
return;
6467
}
65-
deque.offerLast(value);
66-
if (deque.size() > count) {
67-
// Now deque has count + 1 elements, so the first
68-
// element in the deque definitely does not belong
69-
// to the last count elements of the source
70-
// sequence. We can emit it now.
71-
subscriber.onNext(deque.removeFirst());
68+
if (deque.size() == count) {
69+
subscriber.onNext(on.getValue(deque.removeFirst()));
7270
}
71+
deque.offerLast(on.next(value));
7372
}
7473

7574
};

0 commit comments

Comments
 (0)