4 votes

Recherche d'un deque circulaire à base de tableau à taille fixe

Je suis à la recherche d'un Deque qui présente les caractéristiques suivantes :

  • il a une taille fixe
  • Si j'ajoute des éléments à la tête/queue, les éléments à l'extrémité opposée disparaissent.
  • il s'agit d'un tableau, ce qui permet d'accéder à des éléments aléatoires en temps constant.
  • Je peux ajouter des éléments à l'avant ou à la fin (deque)

J'ai vérifié le Deque dans le cadre de la JCF mais je n'ai rien trouvé qui corresponde.

2voto

akuhn Points 12241

Parce que j'adore écrire mes propres types de données,

import static org.junit.Assert.assertEquals;
import org.junit.Test;

public class Ring {

    private String[] data;
    int n = 0;

    public Ring(int size) {
        data = new String[size];
    }

    public void push(String s) {
        data[n] = s;
        n = (n + 1) % data.length;
    }

    public void shift(String s) {
        data[n = (n - 1) % data.length] = s;
    }

    public String get(int index) {
        return data[(n + index) % data.length];
    }

    public static class Examples {

        @Test
        public void shouldDropElementsWhenPushingTooFar() {
            Ring ring = new Ring(3);
            ring.push("A");
            ring.push("B");
            ring.push("C");
            ring.push("D");
            ring.push("E");
            assertEquals("C", ring.get(0));
            assertEquals("D", ring.get(1));
            assertEquals("E", ring.get(2));
        }

        @Test
        public void shouldAddElementsAtTheFront() {
            Ring ring = new Ring(3);
            ring.push("A");
            ring.push("B");
            ring.push("C");
            ring.push("D");
            ring.push("E");
            // rewind
            ring.shift("B");
            assertEquals("B", ring.get(0));
            assertEquals("C", ring.get(1));
            assertEquals("D", ring.get(2));
        }

    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X