Двунаправленная последовательная очередь арестова и двунаправленная цепная очередь LinkedList, JDK был включен, опущен здесь. ArrayDeque включает последовательный стек и последовательный очередь, в то время как LinkedList содержит цепную стек и очередь цепи. И Arraydeque, и LinkedList-это невыполнение потока. Приоритетная очередь приоритета также находится в JDK.
1. Реализация последовательных очередей
Пакет Lang; импорт java.io.serializable; import java.util.arrays;/** * @classname: arrayqueue * @description: последовательный очередь * @date 20 января 2014 г. в 3:46:19 PM * @param <t> */public arrayqueue <t> Serializable {/ * @fielddi averseverseverseverseverseverseverseverseverseversevere atialib Статический последний длинный SerialVersionuid = 7333344126529379197L; private int default_size = 10; private int емкость; // Сохранить длину массива частного объекта [] elementData; // Определить массив для сохранения элементов последовательной очереди private int front = 0; // голова флота private int ud = 0; // Команда терминалов // Создать пустую последовательную очередь общедоступной arrayqueue () {емкость = default_size; elementData = новый объект [емкость]; } // Создать последовательную очередь public arrayqueue (t element) {this (); elementData [0] = element; задний ++; } public arrayqueue (int initize) {elementData = new Object [Initsize]; } / *** Создать очередь заказа с массивом указанной длины* @param Укажите первый элемент в очереди заказа* @param initsize Укажите длину базового массива очереди порядка* / public arrayqueue (t element, inticize) {this.capatical = initize; elementData = новый объект [емкость]; elementData [0] = element; задний ++; } / ** * @title: size * @description: Получить размер последовательной очереди * @return * / public int size () {return wart - front; } / ** * @title: предложение * @description: enqueue * @param element * / public void предложение (t element) {EnceRecapacity (заднее значение + 1); elementData [bult ++] = element; } private void EnsureCapacity (int mincapacity) {// Если исходная длина массива меньше, чем текущая длина int oldCapacity = elementData.length; if (mincapacity> oldcapacity) {int newcapacity = (OldCapacity * 3) / 2 + 1; if (newcapacity <mincapacity) newcapacity = mincapacity; // mincapacity обычно близка к размеру, так что это победа: elementData = arrays.copyof (elementdata, newcapacity); }} / ** * @title: опрос * @description: dequeue * @return * / public t oppl () {if (isempty ()) {бросить новый indexoutofboundsexception ("Emply queue Exception"); } // сохранить значение элемента на переднем конце очереди t oldValue = (t) elementData [Front]; // Выпустить элемент на переднем конце Queue ElementData [Front ++] = null; вернуть OldValue; } / ** * @title: peek * @description: вернуть верхний элемент очереди, но не удаляет верхний элемент очереди * @return * / public te peek () {if (isempty ()) {бросить новый indexoutofboundsexception ("Exception quember queue"); } return (t) elementData [Front]; } / ** * @title: isempty * @description: определить, является ли очередь заказа пустой очередью * @return * / public boolean isempty () {return upred == front; } / *** @title: clear* @description: очистить очередь заказа* / public void clear () {// назначить все элементы базового массива на Null Arrays.fill (elementData, null); Фронт = 0; задний = 0; } public String toString () {if (isempty ()) {return "[]"; } else {stringBuilder sb = new StringBuilder ("["); for (int i = front; i <bult; i ++) {sb.append (elementdata [i] .toString ()+","); } int len = sb.length (); вернуть sb.delete (len - 2, len) .append ("]"). toString (); }}}2. Реализация цепных очередей
Пакет Lang; Import java.io.serializable;/** * @classname: linkqueue * @description: queue * @date 21 января 2014 г. в 3:24:38 * @param <t> */public class linkqueue <t> statierable {/** * @fields serialversuid: todoverse staticureable {/** * @fields serialversionuid: todoverseverse staticureable {/** * @fields serialversionuid: todoVerivable wealVersable {/** * @fields serialversuid -6726728595616312615L; // Определите внутренний узел класса, а экземпляр узла представляет узел очереди цепи. частный класс node {private t data; // Сохранить данные узла частного узла Next; // Ссылка на следующий узел // Конструктор без параметров public node () {} // Конструктор для инициализации всех атрибутов public node (t data, node next) {this.data = data; this.next = Далее; / Front = null; задний = null; }/** * <p> Название: Linkqueue </p> * <p> Описание: Создать цепную очередь, указав элементы данных, который имеет только один элемент в очереди цепи </p> */public linkqueue (t element) {front = new Node (элемент, null); // только один узел, передняя и задняя точка к задней части узла = спереди; размер ++; } / ** * @title: size * @description: получить размер последовательной очереди * @return * / public int size () {return size; } /** * @title: предложение * @description: enqueue * @param element * /public void предложение (t -элемент) {// Если очередь цепи все еще остается пустой очередью цепи if (front == null) {front = new Node (элемент, null); BERT = FRED; // Существует только один узел, передняя и задняя точка к узлу} else {node newNode = new Node (элемент, null); // Создать новый узел.next = newNode; // Пусть ближайший из нового узла в новом узле; } / ** * @title: опрос * @description: dequeue * @return * / public t poll () {node oldfront = front; front = front.next; OldFront.next = null; размер--; вернуть oldfront.data; } / ** * @title: peek * @description: вернуть верхний элемент очереди, но не удаляйте верхний элемент очереди * @return * / public t peek () {return beet.data; } / ** * @title: isempty * @description: определить, является ли очередь заказа пустой очередью * @return * / public boolean isempty () {return size == 0; } / *** @title: clear* @description: очистить очередь заказа* / public void clear () {// назначить передние и задние узлы как null front = null; задний = null; размер = 0; } public String toString () {// Когда очередь цепи - это пустая очередь цепи if (isempty ()) {return "[]"; } else {stringBuilder sb = new StringBuilder ("["); for (node current = front; current! = null; current = current.next) {sb.append (current.data.tostring () + ","); } int len = sb.length (); вернуть sb.delete (len - 2, len) .append ("]"). toString (); }} public static void main (string [] args) {linkqueue <string> queue = new Linkqueue <string> ("aaaa"); // добавить два элемента queue.offer ("bbbb"); queue.ffer ("cccc"); System.out.println (Queue); // croute queue.poll () после удаления элемента; System.out.println ("Удалить очередь после элемента:" + queue); // добавить элемент снова Queue.offer ("dddd"); System.out.println ("добавить очередь снова после элемента:" + queue); // добавить элемент снова очередь. Poll (); // Добавить элемент снова Queue.offer ("eeee"); System.out.println (Queue); }}3. Внедрение круговых очередей
Пакет lang; импорт java.io.serializable; import java.util.arrays;/** * @classname: lopqueue * @description: lopqueue * @date 20 января 2014 г. в 3:47:14 */public class loopqueue <t> Serializable {/** @fields serialversion SerialVersionUid = -3670496550272478781L; private int default_size = 10; Private int емкость; // Сохранить длину массива частного объекта [] elementData; // Определить массив для сохранения элементов очереди цикла Private int front = 0; // голова флота Private int up = 0; // Команда терминала // Создать пустую очередь петли с общедоступной длиной по умолчанию () {емкость = Default_size; elementData = новый объект [емкость]; } // Создать очередь цикла с элементом инициализации Public Loopqueue (t Element) {this (); elementData [0] = element; задний ++; } / *** Создание очереди цикла с массивом указанной длины* @param Укажите первый элемент в очереди цикла* @param initisize Укажите длину базового массива цикла цикла* / public goopqueue (t element, intitize) {this.capacity = initize; elementData = новый объект [емкость]; elementData [0] = element; задний ++; } // Получить размер очереди цикла public int size () {if (isempty ()) {return 0; } вернуть заднюю часть> спереди? Задняя часть - спереди: емкость - (спереди - сзади); } // Вставить очередь public void add (t element) {if (bul == Front && elementData [Front]! = Null) {бросить новый indexoutofboundsexception ("Исключение, чья очередь полна"); } elementData [bult ++] = element; // Если задняя часть достигла конца, поверните головку назад = заднюю емкость? 0: задний; } // Удалить очередь public t remove () {if (isempty ()) {бросить новый indexoutofboundsexception ("Exception Exception queue"); } // сохранить значение элемента на заднем конце очереди t oldValue = (t) elementData [Front]; // Выпустить элемент на заднем конце Queue ElementData [Front ++] = null; // Если фронт достиг конца, то поверните фронт = Front == емкость? 0: фронт; вернуть OldValue; } // Возвращает верхний элемент очереди, но не удаляйте верхний элемент очереди public t element () {if (isempty ()) {бросить новый indexoutofboundsexception ("Emply queue Exception"); } return (t) elementData [Front]; } // Определите, является ли очередь цикла пустой очередью общедоступной логической iSempty () {// спереди == спереди, а элемент сзади - null return wart == Front && elementData [задний] == null; } // Очистить очередь цикла public void clear () {// назначить все элементы базового массива на нулевые массивы. Фронт = 0; задний = 0; } public String toString () {if (isempty ()) {return "[]"; } else {// Если спереди <сзади, допустимый элемент - это элемент между передним и задним IF (спереди <задний) {stringBuilder sb = new StringBuilder ("["); for (int i = front; i <bult; i ++) {sb.append (elementdata [i] .toString ()+","); } int len = sb.length (); вернуть sb.delete (len - 2, len) .append ("]"). toString (); } // Если Front> = задний, допустимый элемент находится между Front-> емкостью и 0-> Front {StringBuilder sb = new StringBuilder ("["); for (int i = front; i <емкость; i ++) {sb.append (elementData [i] .toString ()+","); } for (int i = 0; i <bult; i ++) {sb.append (elementData [i] .toString ()+","); } int len = sb.length (); вернуть sb.delete (len - 2, len) .append ("]"). toString (); }}} public static void main (string [] args) {loopqueue <string> queue = new loopqueue <string> ("aaaa", 3); // добавить два элемента queue.add ("bbbb"); queue.add ("cccc"); // В настоящее время очередь является полной системой. // После удаления элемента очередь может добавить еще одну очередь элементов.remove (); System.out.println ("очередь после удаления элемента:" + queue); // снова добавить элемент, и очередь снова заполнена очередь. ADD ("DDDD"); System.out.println (Queue); System.out.println (Queue); System.out.println (Queue); // После удаления элемента очередь может добавить еще одну очередь элементов.remove (); // снова добавить элемент, и очередь снова заполнена очередь. ADD ("eeee"); System.out.println (Queue); }}Приведенный выше метод реализации Java Queue (последовательная очередь, цепочка, очередь цикла) - это все контент, которым я поделился с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.