Java collection is used for special scrolling and looping queues

I'm looking for something similar to concurrentlinkedqueue, but I have the following behavior:

>When I view the () / poll () queue, it retrieves the head without deleting it, and then advances a node of the head to tail > when head = = tail, the next time I view () / poll (), the head will be reset to its original node (so it is a "loop" behavior)

So, if I create a queue like this:

MysteryQueue<String> queue = new MysteryQueue<String>();
queue.add("A"); // The "original" HEAD
queue.add("B");
queue.add("C");
queue.add("D"); // TAIL

String str1 = queue.peek(); // Should be "A"
String str2 = queue.peek(); // Should be "B"
String str3 = queue.peek(); // Should be "C"
String str4 = queue.peek(); // Should be "D"
String str5 = queue.peek(); // Should be "A" again

In this way, I can peek / poll all day and the queue will roll my queue over and over again

Does JRE come with such a thing? If not, could it be something in Apache commons collections or other third-party libraries? Thank you in advance!

Solution

You can do this by using an ArrayList with a pointer to head (I won't write out the entire class, but this is the peek method):

public T peek() {
    if (list.size() == 0)
        return null;
    T ret = list.get(head);
    head++;
    if (head == list.size()) {
        head = 0;
    }
    return ret;
}

You don't really specify how the addition should work, but you should be able to use the default addition of ArrayList

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>