Arraydeque de fila sequencial bidirecional e fila de cadeia bidirecional LinkedList, JDK foi incluída, omitida aqui. O Arraydeque inclui pilha seqüencial e fila seqüencial, enquanto o LinkedList contém pilha de corrente e fila de corrente. Tanto o Arraydeque quanto o LinkedList são inseguros de threads. A fila de prioridade de prioridade também está no JDK.
1. Implementação de filas seqüenciais
pacote lang; importar java.io.Serializable; importar java.util.arrays;/** * @className: ArrayQueue * @Description: fila seqüencial * @Date 20 de janeiro de 2014 às 15:46:19 PM * @param <T> */public Arrayueeue <t> implementIlable… estático final serialversionUid = 73333344126529379197L; private int default_size = 10; private int capacidade; // salve o comprimento do objeto privado da matriz [] elementData; // Defina uma matriz para salvar elementos da fila seqüencial private int front = 0; // cabeça de frota private int traseiro = 0; // equipe terminal // cria fila seqüencial vazia public Arrayqueue () {Capacidade = default_size; elementData = novo objeto [capacidade]; } // Crie fila seqüencial Arrayqueue (elemento T) {this (); elementData [0] = elemento; traseiro ++; } public ArrayQueue (int initsize) {elementData = novo objeto [initsize]; } / *** Crie uma fila de pedidos com uma matriz de comprimento especificado* elemento @param Especifique o primeiro elemento na fila da ordem* @param initsize Especifique o comprimento da matriz subjacente da fila de ordem* / Arration Public Arrayqueue (elemento T, Int initsize) {this.capacity = initsize; elementData = novo objeto [capacidade]; elementData [0] = elemento; traseiro ++; } / ** * @title: size * @description: obtenha o tamanho da fila seqüencial * @return * / public int size () {return traseiro traseiro - front; } / ** * @title: oferta * @Description: Enqueue * @param elemento * / public void Ofert (elemento T) {surCapacity (traseiro + 1); elementData [traseiro ++] = elemento; } vazio privado EnsureCapacity (int mincapacity) {// Se o comprimento original da matriz for menor que o comprimento atual necessário int antigoCapacity = elementData.length; if (Mincapacity> OldCapacity) {int newCapacity = (OldCapacity * 3) / 2 + 1; if (newcapacity <mincapacity) newCapacity = MinCapacity; // MinCapacity geralmente é próximo do tamanho, então isso é uma vitória: elementData = Arrays.copyof (ElementData, NewCapacity); }} / ** * @Title: Poll * @Description: dequeue * @return * / public t Poll () {if (isEmpty ()) {lança novo indexOutOfBoundSexception ("Exceção de fila vazia"); } // retém o valor do elemento na extremidade frontal da fila T OldValue = (t) ElementData [FRONT]; // libere o elemento na extremidade frontal do elemento da fila [front ++] = null; retornar OldValue; } / ** * @title: peek * @Description: retorne o elemento superior da fila, mas não exclui o elemento superior da fila * @return * / public t peek () {if (isEmpty ()) {tiro o novo indexOtOfBoundSception ("Exception da fila emaue"); } return (t) elementData [front]; } / ** * @title: isEmpty * @Description: Determine se a fila de pedidos é uma fila vazia * @return * / public boolean isEmpty () {return trasch == front; } / *** @title: CLEAR* @Description: Limpe a fila do pedido* / public void clear () {// atribui todos os elementos da matriz subjacente a NULL Arrays.fill (ElementData, NULL); front = 0; traseiro = 0; } public string tostring () {if (isEmpty ()) {return "[]"; } else {stringbuilder sb = new stringbuilder ("["); for (int i = front; i <traseiro; i ++) {sb.append (elementData [i] .toString ()+","); } int len = sb.length (); retornar sb.delete (len - 2, len) .append ("]"). tostring (); }}}2. Implementação de filas de cadeia
package lang;import java.io.Serializable;/** * @ClassName: LinkQueue * @Description: Chain Queue* @date January 21, 2014 at 3:24:38 pm * @param <T> */public class LinkQueue<T> implements Serializable{ /** * @Fields serialVersionUID : TODO */ private static final long serialVersionUID = -6726728595616312615L; // Defina um nó de classe interna e a instância do nó representa o nó da fila da cadeia. Classe privada nó {Dados T privado; // Salve os dados do nó nó privado a seguir; // Referência ao próximo nó // construtor sem parâmetros public node () {} // construtor para inicializar todos os atributos do nó público (dados t, node a seguir) {this.data = dados; this.Next = Next; }} nó privado front; // Salve o nó da cabeça da fila da corrente traseiro traseiro do nó privado; // Salve o nó da cauda da fila de corrente privado int tamanho; // Salve o número de nós já incluídos na fila da corrente/** ** * título: linkwue </p> * <p> Descrição: Crie uma cadeia vazia queeue </p> * * front = null; traseiro = nulo; }/** * <p> Título: LinkQueue </p> * <p> Descrição: Crie uma fila de cadeia especificando elementos de dados, que possuem apenas um elemento na fila da cadeia </p> */public linkQueue (t element) {front = new Node (elemento, null); // apenas um nó, ponto dianteiro e traseiro para o nó traseiro = frontal; tamanho ++; } / ** * @title: size * @description: obtenha o tamanho da fila seqüencial * @return * / public int size () {return size; } /** * @title: oferta * @Description: Enqueue * @param elemento * /public void oferta (elemento t) {// Se a fila da corrente ainda for uma fila de corrente vazia if (front == null) {front = novo nó (elemento, nulo); traseiro = front; // existe apenas um nó, ponto dianteiro e traseiro para o nó} else {node newNode = new Node (elemento, nulo); // Crie um novo node.next = newNode; // Deixe o próximo nó da cauda nó nó recém -adicionado. } / ** * @Title: Poll * @Description: dequeue * @return * / public t poll () {node Oldfront = Front; FRONT = FRONT.NEXT; Oldfront.Next = null; tamanho--; retornar Oldfront.data; } / ** * @title: peek * @description: retorne o elemento superior da fila, mas não exclua o elemento superior da fila * @return * / public t peek () {return rear.data; } / ** * @title: isEmpty * @Description: determine se a fila de pedidos é uma fila vazia * @return * / public boolean isEmpty () {return size == 0; } / *** @Title: Clear* @Description: Limpe a fila do pedido* / public void clear () {// Atribua os nós dianteiros e traseiros como NULL FRONT = NULL; traseiro = nulo; tamanho = 0; } public string tostring () {// Quando a fila da corrente é uma fila de corrente vazia if (isEmpty ()) {return "[]"; } else {stringbuilder sb = new stringbuilder ("["); para (nó corrente = front; corrente! = null; current = Current.Next) {sb.append (current.data.toString () + ","); } int len = sb.length (); retornar sb.delete (len - 2, len) .append ("]"). tostring (); }} public static void main (string [] args) {linkQueue <string> fileue = new linkQueue <string> ("aaaa"); // Adicione dois elementos queue.offer ("bbbb"); fileue.offer ("cccc"); System.out.println (fila); // croute fileue.poll () após excluir um elemento; System.out.println ("Excluir fila após um elemento:" + fila); // Adicione um elemento novamente na fila.offer ("dddd"); System.out.println ("Adicione a fila após um elemento novamente:" + fila); // Adicione um elemento novamente na fila.poll (); // Adicione um elemento novamente na fila.offer ("eeee"); System.out.println (fila); }}3. Implementação de filas circulares
package lang;import java.io.Serializable;import java.util.Arrays;/** * @ClassName: LoopQueue * @Description: LoopQueue * @date January 20, 2014 at 3:47:14 pm */public class LoopQueue<T> implements Serializable{ /** * @Fields serialVersionUID : TODO */ private static final long SerialversionUID = -3670496550272478781L; private int default_size = 10; private int capacidade; // salve o comprimento do objeto privado da matriz [] elementData; // Defina uma matriz para salvar os elementos da fila de loop privado int front = 0; // cabeça de frota private int traseiro = 0; // equipe de terminal // cria fila de loop vazia com a matriz padrão de loopwuue public lOOPQUEUE () {Capacidade = default_size; elementData = novo objeto [capacidade]; } // Crie uma fila de loop com um elemento de inicialização Public Loopqueue (elemento T) {this (); elementData [0] = elemento; traseiro ++; } / *** Crie uma fila de loop com uma matriz de comprimento especificado* elemento @param Especifique o primeiro elemento na fila de loop* @param initsize Especifique o comprimento da matriz subjacente da fila de loop* / public loopqueue (elemento t, int initsize) {this.capacity = initsize; elementData = novo objeto [capacidade]; elementData [0] = elemento; traseiro ++; } // Obtenha o tamanho da fila de loop public int size () {if (isEmpty ()) {return 0; } retornar traseiro> Frente? traseira - front: capacidade - (frontal - traseira); } // Insira a fila public void add (t element) {if (traseiro == front && elementData [front]! = Null) {lança novo indexOutOfBoundSexception ("Exceção cuja fila está cheia"); } elementData [traseiro ++] = elemento; // Se a traseira atingir o final, gire a cabeça para trás = traseira == Capacidade? 0: traseira; } // Remova a fila public t Remow () {if (isEmpty ()) {lança novo indexOutOfBoundSexception ("Exceção de fila vazia"); } // retém o valor do elemento na extremidade traseira da fila T OldValue = (t) ElementData [FRONT]; // libere o elemento na extremidade traseira do elemento da fila [front ++] = null; // Se a frente atingiu o final, vire a frente = front == Capacidade? 0: Frente; retornar OldValue; } // Retorna o elemento superior da fila, mas não exclua o elemento superior do elemento t public public () {if (isEmpty ()) {lança novo indexOutOfBoundSexception ("Exceção de fila vazia"); } return (t) elementData [front]; } // Determine se a fila de loop é uma fila vazia pública booleana isEmpty () {// traseira == frontal e o elemento na parte traseira é NULL Return trasch == front && elementData [traseiro] == null; } // Limpe a fila de loop public void clear () {// atribui todos os elementos da matriz subjacente a null Arrays.fill (elementData, null); front = 0; traseiro = 0; } public string tostring () {if (isEmpty ()) {return "[]"; } else {// Se frente <traseiro, o elemento válido é o elemento entre a frente e a traseira if (frontal <traseira) {stringbuilder sb = new stringbuilder ("["); for (int i = front; i <traseiro; i ++) {sb.append (elementData [i] .toString ()+","); } int len = sb.length (); retornar sb.delete (len - 2, len) .append ("]"). tostring (); } // Se frente> = traseiro, o elemento válido está entre front-> capacidade e 0-> front {stringbuilder sb = new StringBuilder ("["); for (int i = front; i <capacidade; i ++) {sb.append (elementData [i] .toString ()+","); } para (int i = 0; i <traseiro; i ++) {sb.append (elementData [i] .toString ()+","); } int len = sb.length (); retornar sb.delete (len - 2, len) .append ("]"). tostring (); }}} public static void main (string [] args) {loopQueue <string> fila = new LoopQueue <string> ("aaaa", 3); // Adicione dois elementos queue.add ("bbbb"); fileue.add ("cccc"); // Neste momento, a fila é completa do sistema.out.println (fila); // Depois de excluir um elemento, a fila pode adicionar outra fila de elemento.remove (); System.out.println ("A fila após excluir um elemento:" + fila); // Adicione um elemento novamente e a fila está cheia de novo na fila.add ("dddd"); System.out.println (fila); System.out.println (fila); System.out.println (fila); // Depois de excluir um elemento, a fila pode adicionar outra fila de elemento.remove (); // Adicione um elemento novamente e a fila está cheia de novo na fila.add ("eeee"); System.out.println (fila); }}O método de implementação da fila Java acima (fila seqüencial, fila de cadeia, fila de loop) é todo o conteúdo que compartilhei com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.