Arraydeque de cola secuencial bidireccional y cola de cadena bidireccional LinkedList, JDK se ha incluido, omitido aquí. Arraydeque incluye pila secuencial y cola secuencial, mientras que LinkedList contiene pila de cadenas y cola de cadena. Tanto Arraydeque como LinkedList son la inicio de hilo. La cola prioritaria de priorityqueue también está en el JDK.
1. Implementación de colas secuenciales
paquete lang; import java.io.Serializable; import java.util.arrays;/** * @classname: arrayqueue * @Description: Sequential Queue * @Date el 20 de enero de 2014 a 3:46:19 PM * @ @t> */public class Arrayqueue <T> Implementa serializable serializable {/** * @fields Estatic final Long SerialVersionUid = 7333344126529379197l; Private int default_size = 10; Capacidad privada int; // Guardar la longitud del objeto privado de matriz [] elementData; // Definir una matriz para guardar elementos de la cola secuencial private int front = 0; // Fleet Head private int Reaw = 0; // Terminal Team // Crear cola secuencial vacía Public Arrayqueue () {Capacidad = default_size; elementData = nuevo objeto [capacidad]; } // Crear cola secuencial pública arrayqueue (t elemento) {this (); elementData [0] = elemento; trasero ++; } public arrayqueue (int inItSize) {elementData = new Object [initsize]; } / *** Crear una cola de pedido con una matriz de longitud especificada* @param Element especifica el primer elemento en la cola de pedidos* @param initsize especifique la longitud de la matriz subyacente de la cola de pedidos* / public unaenqueue (t elemento t, int initsize) {this.capacity = initsize; elementData = nuevo objeto [capacidad]; elementData [0] = elemento; trasero ++; } / ** * @title: size * @Description: Obtenga el tamaño de la cola secuencial * @return * / public int size () {return trasero - front; } / ** * @Title: Oferta * @Description: Enqueue * @param elemento * / oferta pública void (elemento t) {EnsureCapacity (trasero + 1); elementData [trasero ++] = elemento; } private void asurecapacity (int mincapacity) {// Si la longitud original de la matriz es menor que la longitud actual requerida int OldCapacity = elementData.length; if (mincapacity> OldCapacity) {int NewCapacity = (OldCapacity * 3) / 2 + 1; if (newCapacity <mincapacity) newCapacity = mincapacity; // La mincapacidad generalmente está cerca del tamaño, por lo que esta es una victoria: elementData = arrays.copyOf (elementData, newCapacity); }} / ** * @Title: Poll * @Description: Dequeue * @return * / public t enchufe () {if (isEmpty ()) {throw New IndexOutofBoundSException ("Excepción de la cola vacía"); } // retener el valor del elemento en el extremo frontal de la cola t oldValue = (t) elementData [front]; // libera el elemento en el extremo frontal de la cola elementdata [front ++] = null; devolver OldValue; } / ** * @title: peek * @Description: devuelve el elemento superior de la cola, pero no elimina el elemento superior de la cola * @return * / public t pEek () {if (isEmpty ()) {tire el nuevo indexOutOfBoundSexception ("Excepción de la cola vacía"); } return (t) elementData [front]; } / ** * @title: isEmpty * @Description: Determine si la cola de pedidos es una cola vacía * @return * / public boolean isEmpty () {return tras == front; } / *** @title: claro* @Description: Borre la cola de pedidos* / public void clear () {// Asigne todos los elementos de la matriz subyacente a matriz null.fill (elementData, null); Frente = 0; trasero = 0; } public string toString () {if (isEmpty ()) {return "[]"; } else {StringBuilder sb = new StringBuilder ("["); for (int i = front; i <round; i ++) {sb.append (elementData [i] .ToString ()+","); } int len = sb.length (); return sb.delete (len - 2, len) .append ("]"). toString (); }}}2. Implementación de colas de cadena
paquete lang; import java.io.Serializable;/** * @classname: linkqueue * @Description: Chain Queue * @Date 21 de enero de 2014 a las 3:24:38 pm * @param <t> */Public Class LinkQueue <T> Implementa serializable {/** * @fields SerialversionUid: adododododo -static final static serialversionId = -6726728595616312615l; // Defina un nodo de clase interna, y la instancia del nodo representa el nodo de la cola de cadena. Nodo de clase privada {private t data; // Guardar los datos del nodo privado de nodo Siguiente; // Referencia al siguiente nodo // Constructor sin parámetros nodo público () {} // Constructor para inicializar todos los atributos nodo público (t data, nodo Node) {this.data = data; this.next = siguiente; }} Nodo privado front; // Guardar el nodo de la cabeza del nodo de la cola de cadena Redilla de nodo privado; // Guardar el nodo de cola de la cola de cadena de tamaño privado intitional; // Guarde el número de nodos ya incluidos en la cola de cadena/** * <p> Título: Linkqueue </p> * <p> Descripción: Crear una cola de cadena vacía </p> * */public Linkqueue () {// front = nulo; trasero = nulo; }/** * <p> Título: LinkQueue </p> * <p> Descripción: Cree una cola de cadena especificando elementos de datos, que solo tiene un elemento en la cola de cadena </p> */public Linkqueue (temem) {front = new Node (elemento, nulo); // solo un nodo, el punto delantero y trasero al nodo trasero = delantero; tamaño ++; } / ** * @title: size * @Description: obtenga el tamaño de la cola secuencial * @return * / public int size () {return size; } /** * @title: oferta * @Description: enqueue * @param elemento * /pública void oferta (t elemento) {// Si la cola de cadena sigue siendo una cola de cadena vacía if (front == null) {front = new nodo (elemento, nulo); trasero = front; // Solo hay un nodo, punto delantero y trasero al nodo} else {nodo newnode = new Node (elemento, null); // Cree un nuevo nodo.next = newnode; // dejar que el próximo nodo de la cola se apunte al nodo recién agregado = newnode; // tomando un nuevo nodo como el nuevo nodo de cola} ++; } / ** * @title: encuesta * @Description: dequeue * @return * / public t encode () {nodo oldfront = front; front = front.next; Oldfront.next = null; tamaño--; devolver Oldfront.Data; } / ** * @title: peek * @Description: devuelve el elemento superior de la cola, pero no elimina el elemento superior de la cola * @return * / public t peek () {return roard.data; } / ** * @title: isEmpty * @Description: Determine si la cola de pedidos es una cola vacía * @return * / public boolean isEmpty () {return size == 0; } / *** @title: clare* @Description: borre la cola de pedidos* / public void clear () {// Asigne los nodos delanteros y traseros como null front = null; trasero = nulo; tamaño = 0; } public String toString () {// Cuando la cola de cadena es una cola de cadena vacía if (isEtimty ()) {return "[]"; } else {StringBuilder sb = new StringBuilder ("["); for (nodo actual = front; current! = null; current = current.next) {sb.append (current.data.ToString () + ","); } int len = sb.length (); return sb.delete (len - 2, len) .append ("]"). toString (); }} public static void main (string [] args) {LinkQueue <String> queue = new LinkQueue <String> ("AAAA"); // agregar dos elementos cola.offer ("bbbb"); Queue.offer ("CCCC"); System.out.println (cola); // croute queue.poll () después de eliminar un elemento; System.out.println ("Eliminar la cola después de un elemento:" + cola); // Agregar un elemento nuevamente queue.offer ("dddd"); System.out.println ("Agregue la cola después de un elemento nuevamente:" + cola); // Agregar un elemento nuevamente queue.poll (); // Agregar un elemento nuevamente queue.offer ("eeee"); System.out.println (cola); }}3. Implementación de colas circulares
paquete lang; import java.io.Serializable; import java.util.arrays;/** * @classname: loopqueue * @Description: loopqueue * @Date 20 de enero de 2014 a 3:47:14 pm */clase pública de la clase pública <t> implementa serializable {/** * @fields serialversionUid: todoDODODODODODODO SERVICI -3670496550272478781l; Private int default_size = 10; Capacidad privada int; // Guardar la longitud del objeto privado de matriz [] elementData; // Definir una matriz para guardar los elementos de la cola de bucle private int front = 0; // fleet head private int retro = 0; // Terminal Team // Crear cola de bucle vacía con la longitud de matriz predeterminada Public Loopqueue () {capacidad = default_size; elementData = nuevo objeto [capacidad]; } // crear una cola de bucle con un elemento de inicialización public loopqueue (temem) {this (); elementData [0] = elemento; trasero ++; } / *** Crear una cola de bucle con una matriz de longitud especificada* @param Element especifica el primer elemento en la cola de bucle* @param initsize especifique la longitud de la matriz subyacente de la cola de bucle* / public loopqueue (t elemento t, int initsize) {this.capacity = initsize; elementData = nuevo objeto [capacidad]; elementData [0] = elemento; trasero ++; } // Obtenga el tamaño de la cola de bucle public int size () {if (isEmpty ()) {return 0; } return trasero> frente? trasero - frente: capacidad - (delantera - trasero); } // Inserte la cola public void add (t elemento) {if (trasero == front && elementData [front]! = Null) {throw new indexOutofBoundsexception ("excepción cuya cola está llena"); } elementData [trasero ++] = elemento; // Si la parte trasera ha alcanzado el extremo, gire la cabeza hacia atrás = trasero == capacidad? 0: trasero; } // Eliminar la cola public t remove () {if (isEmpty ()) {tire nuevo índiceuToFboundsexception ("excepción de cola vacía"); } // retener el valor del elemento en el extremo trasero de la cola t oldValue = (t) elementData [front]; // libera el elemento en el extremo trasero de la cola elementdata [front ++] = null; // Si el frente ha llegado al final, entonces gire front = front == capacidad? 0: frente; devolver OldValue; } // Devuelve el elemento superior de la cola, pero no elimine el elemento superior de la cola public t element () {if (isEtimty ()) {tire nuevo índiceutoOfBoundsexception ("excepción de cola vacía"); } return (t) elementData [front]; } // Determine si la cola de bucle es una cola vacía pública boolean isEtimty () {// trasero == delantera y el elemento en la parte trasera es nula return retroal == front && elementData [trasero] == null; } // borrar la cola de bucle public void clear () {// Asignar todos los elementos de la matriz subyacente a las matrices nulo.fill (elementData, null); Frente = 0; trasero = 0; } public string toString () {if (isEmpty ()) {return "[]"; } else {// Si delantero <trasero, el elemento válido es el elemento entre elantero y el trasero if (delantero <trasero) {stringBuilder sb = new StringBuilder ("["); for (int i = front; i <round; i ++) {sb.append (elementData [i] .ToString ()+","); } int len = sb.length (); return sb.delete (len - 2, len) .append ("]"). toString (); } // if front> = trasero, el elemento válido está entre front-> capacidad y 0-> front {stringBuilder sb = new StringBuilder ("["); for (int i = front; i <capacidad; i ++) {sb.append (elementData [i] .ToString ()+","); } para (int i = 0; i <roard; i ++) {sb.append (elementData [i] .ToString ()+","); } int len = sb.length (); return sb.delete (len - 2, len) .append ("]"). toString (); }}} public static void main (string [] args) {loopqueue <string> queue = new Loopqueue <String> ("AAAA", 3); // agregar dos elementos queue.add ("bbbb"); queue.add ("cccc"); // en este momento la cola es completa System.out.println (cola); // Después de eliminar un elemento, la cola puede agregar otro elemento queue.remove (); System.out.println ("La cola después de eliminar un elemento:" + cola); // Agregar un elemento nuevamente, y la cola está llena nuevamente queue.add ("dddd"); System.out.println (cola); System.out.println (cola); System.out.println (cola); // Después de eliminar un elemento, la cola puede agregar otro elemento queue.remove (); // Agregar un elemento nuevamente, y la cola está llena nuevamente queue.add ("eeee"); System.out.println (cola); }}El método de implementación de la cola Java anterior (cola secuencial, cola de cadena, cola de bucle) es todo el contenido que he compartido con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.