- Queue Java – интерфейс очереди
- Реализации
- Как добавить элемент
- Как получить элемент
- Как посмотреть на первый элемент
- Как итерировать все элементы?
- Как удалить элемент?
- Общая очередь
- Итерация по queue в Java
- 1. Использование расширенного цикла for
- 2. Использование Iterator
- 3. Java 8 — использование потоков
- 4. Преобразование queue в массив
- 5. Использование Enumeration Interface
- 6. Использование Queue.toString() метод
- Кофе-брейк #162. Реализация стека с использованием очереди. Методы класса Java Math
- Решение задачи
- Первый вариант
- Второй вариант решения
- Методы класса Java Math
Queue Java – интерфейс очереди
Интерфейс Java Queue, java.util.Queue, представляет собой структуру данных, предназначенную для вставки элементов в конец очереди и удаления элементов из начала очереди. Это похоже на работу очереди в супермаркете.
Интерфейс является подтипом интерфейса Collection. Он представляет упорядоченную последовательность объектов так же, как список, но его предполагаемое использование немного отличается.
Реализации
Будучи подтипом Collection, все методы в интерфейсе Collection также доступны в интерфейсе Queue.
Поскольку Queue является интерфейсом, вам необходимо создать конкретную реализацию, чтобы использовать его. Вы можете выбрать одну из следующих в API коллекций:
- java.util.LinkedList – довольно стандартная реализация очереди;
- java.util.PriorityQueue хранит свои элементы внутри в соответствии с их естественным порядком (если они реализуют Comparable) или в соответствии с Comparator, переданным в PriorityQueue.
Есть также реализации Queue в пакете java.util.concurrent, но оставим утилиты параллелизма вне этого урока.
Queue queueA = new LinkedList(); Queue queueB = new PriorityQueue();
Как добавить элемент
Для добавления элементов в очередь вызывается ее метод add (). Этот метод наследуется от интерфейса коллекции.
Queue queueA = new LinkedList(); queueA.add("element 1"); queueA.add("element 2"); queueA.add("element 3");
Как получить элемент
Порядок, в котором элементы, добавленные в очередь, хранятся внутри, зависит от реализации. То же самое верно для порядка, в котором элементы извлекаются из очереди.
Как посмотреть на первый элемент
Вы можете посмотреть на элемент в начале очереди, не вынимая его из очереди, element() или метода peek().
Метод element() возвращает первый элемент в очереди. Если очередь пуста, вызывает исключение NoSuchElementException.
Queue queue = new LinkedList(); queue.add("element 1"); queue.add("element 2"); queue.add("element 3"); Object firstElement = queue.element();
После выполнения этого кода переменная firstElement будет содержать элемент value 1, который является первым элементом в очереди.
Peek() работает так же, как метод element (), за исключением того, что он не создает исключение, если очередь пуста. Вместо этого он просто возвращает null. Вот пример:
Queue queue = new LinkedList(); queue.add("element 1"); queue.add("element 2"); queue.add("element 3"); Object firstElement = queue.peek();
Object firstElement = queueA.element();
Как итерировать все элементы?
Вы также можете перебирать все элементы очереди, а не просто обрабатывать по одному за раз.
Queue queueA = new LinkedList(); queueA.add(«element 0»); queueA.add(«element 1»); queueA.add(«element 2»); //access via Iterator Iterator iterator = queueA.iterator(); while(iterator.hasNext() < String element =(String) iterator.next(); >//access via new for-loop for(Object object : queueA)
При выполнении итерации очереди через ее итератор или цикл for-each (который также использует итератор), последовательность, в которой элементы итерируются, зависит от реализации очереди.
Как удалить элемент?
Вызывается метод remove(). Он удаляет элемент в начале очереди. В большинстве реализаций начало и конец очереди находятся на противоположных концах. Однако возможно реализовать интерфейс очереди, чтобы заголовок и конец находились в одном конце. В этом случае у вас будет стек.
Object firstElement = queue.remove();
Общая очередь
По умолчанию вы можете поместить любой объект в очередь, но начиная с Java 5, Generics позволяет ограничить типы объектов, которые вы можете вставить в нее. Вот вам пример:
Queue queue = new LinkedList();
Теперь в эту очередь могут быть вставлены только экземпляры MyObject. Затем вы можете получить доступ к его элементам и повторить их без приведения. Вот как это выглядит:
MyObject myObject = queue.remove(); for(MyObject anObject : queue) < //do someting to anObject. >
Итерация по queue в Java
В этом посте будут обсуждаться различные методы перебора queue в Java.
1. Использование расширенного цикла for
В качестве Queue реализует Iterable интерфейс, мы можем использовать расширенный цикл for для обхода queue, как показано ниже:
2. Использование Iterator
Queue наследовать iterator() метод из java.util.Collection интерфейс, который возвращает итератор для элементов в этой коллекции. Пожалуйста, будьте осторожны при использовании этого метода. Согласно Javadoc, нет никаких гарантий относительно порядка, в котором возвращаются элементы.
Если queue изменена после создания итератора, кроме как с помощью собственного метода удаления итератора, то и итератор, и расширенный цикл for вызовут исключение. ConcurrentModificationException , как показано ниже:
3. Java 8 — использование потоков
В Java 8 мы можем зациклить queue с помощью потоков, лямбда-выражений и forEach() метод, как показано ниже:
4. Преобразование queue в массив
Мы также можем преобразовать queue в массив, используя toArray() метод и распечатать его с помощью Arrays.toString() (или повторить). Существует несколько других реализаций toArray() метод, как показано ниже:
5. Использование Enumeration Interface
Мы также можем использовать устаревшее Enumeration интерфейс для печати queue. Этот интерфейс имеет методы для перечисления элементов Vector . Мы можем сначала преобразовать queue в вектор, а затем распечатать все элементы этого вектора.
6. Использование Queue.toString() метод
Если нам требуется только отобразить содержимое queue, самый простой способ — вызвать функцию toString() метод на нем. Он вернет строковое представление queue, как показано ниже:
результат:
[1, 2, 3]Это все об итерации queue в Java.
Средний рейтинг 4.92 /5. Подсчет голосов: 13
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно
Кофе-брейк #162. Реализация стека с использованием очереди. Методы класса Java Math
Источник: Hackernoon Содержание этой статьи посвящено решению задачи по реализации стека с использованием только двух очередей. Перед нами задача с Leetcode:
Реализуйте стек “последний пришел – первый ушел” (last-in-first-out, LIFO), используя только две очереди. Реализованный стек должен поддерживать все функции обычного стека ( push , top , pop и empty ).
- void push(int x) Помещает элемент x на вершину стека.
- int pop() Удаляет элемент на вершине стека и возвращает его.
- int top() Возвращает элемент на вершине стека.
- boolean empty() Возвращает true , если стек пуст, в ином случае false .
- Вы должны использовать только стандартные операции очереди, что означает допустимость только таких операций, как push to back , peek/pop from front , size и is empty .
- В зависимости от вашего языка программирования очередь может не поддерживаться изначально. Но вы можете имитировать очередь, используя список или двустороннюю очередь (двойная очередь), если вы используете только стандартные операции очереди.
["MyStack", "push", "push", "top", "pop", "empty"] [[], [1], [2], [], [], []]
MyStack myStack = new MyStack(); myStack.push(1); myStack.push(2); myStack.top(); // возвращает 2 myStack.pop(); // возвращает 2 myStack.empty(); // возвращает False
Решение задачи
Первый вариант
static class MyStack < private Queuecurrent; private Queue tmp; public MyStack() < current = new ArrayDeque<>(); tmp = new ArrayDeque<>(); >
Нам нужна дополнительная очередь для этого решения. Начнем с push . Для операции push мы просто добавляем новый элемент в нашу текущую очередь.
Главный трюк тут заключается в методе pop . Здесь мы помещаем все элементы, кроме последнего , в очередь tmp . И теперь последний элемент в очереди становится первым отправленным элементом.
public int pop() < if (current.isEmpty())< return -1; >int size = current.size(); for (int i = 0; i < size - 1; i ++)< tmp.add(current.poll()); >int ret = current.poll(); current = tmp; return ret; >
public int top() < if (current.isEmpty())< return -1; >int size = current.size(); for (int i = 0; i < size - 1; i ++)< tmp.add(current.poll()); >int ret = current.peek(); tmp.add(current.poll()); current = tmp; return ret; >
Второй вариант решения
static class MyStack < private Queuecurrent; public MyStack2() < current = new ArrayDeque<>(); > >
Основная идея здесь заключается в методе push . Мы добавляем текущий элемент, а затем перемещаем элементы перед текущим в конец очереди. Например, если у нас есть очередь с элементами [2,1], мы применяем push 3 — и получаем очередь [3,2,1], затем [1,3,2], [2,1,3] и… и все.
public int pop() < return current.poll(); >public int top() < return current.peek(); >public boolean empty()
Методы класса Java Math
Источник: Medium Благодаря этой публикации вы узнаете о возможностях и сфере применения класса Java Math. Составной частью пакета Java.lang.Math в языке Java является класс Math . Этот класс предоставляет нам некоторые предопределенные методы, такие как min , max , sqrt и другие. Ниже приведены примеры некоторых методов из класса Math , которые мы можем использовать в повседневной работе. 1. Метод max() возвращает большее число, переданное в параметре:
System.out.println(Math.max(5,3)); OUTPUT: 5
System.out.println(Math.sqrt(4)); OUTPUT: 2.0
System.out.println(Math.random()); OUTPUT: 0.8685304957692445
4. Метод abs() возвращает абсолютное положительное значение любого отрицательного числа. Например, если мы передаем его как 0, в результате он вернет 0.
System.out.println(Math.abs(-4)); OUTPUT: 4 System.out.println(Math.abs(4)); OUTPUT: 4 System.out.println(Math.abs(0)); OUTPUT: 0
5. Метод floor() возвращает двойное значение, которое меньше или равно аргументу и равно ближайшему математическому целому числу.
System.out.println(Math.floor(-1.2)); OUTPUT: -2.0 System.out.println(Math.floor(1.2)); OUTPUT: 2.0