Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужен пример работы с интерфейсом java.utils.Queue 
:(
    Опции темы
Wowa
Дата 12.1.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



Нужен пример работы с интерфейсом java.utils.Queue
Подкиньте может кто-нибудь?

В гугле по этому запросу почему-то всего одна ссылка: http://www.google.de/search?hl=de&q=ja...Suche&meta=
PM WWW   Вверх
Wowa
Дата 12.1.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



Я нашел некоторую информацию тут: http://www.galileocomputing.de/openbook/ja...0008.htm#bild99 (на немецком)

Там в пример приведен следующий код:
Код

import java.util.*;

class Queue
{
  public void enqueue( Object newElement )
  {
    vectorQueue.addElement( newElement );
  }

  public synchronized Object dequeue()
  {
    if ( !empty() )
    {
      Object first = vectorQueue.elementAt( 0 );
      vectorQueue.removeElementAt( 0 );

      return first;
    }
    return null;
  }

  public boolean empty()
  {
    return vectorQueue.isEmpty();
  }

  private Vector vectorQueue = new Vector();
}




public class QueueTest
{
  public static void main( String args[] )
  {
    Queue queue = new Queue();
    queue.enqueue( "Fischers" );
    queue.enqueue( "Fritze" );
    queue.enqueue( "fischt" );
    queue.enqueue( "frische" );
    queue.enqueue( "Fische" );
    queue.dequeue();
    queue.enqueue( "Nein, es war Paul!" );
    while ( !queue.empty() )
      System.out.println( queue.dequeue() );
  }
}



У меня по этому код есть вопросы:
1. Что это означает? public synchronized Object dequeue()
public - это тип метода
dequeue - это название
А остальное???

PM WWW   Вверх
LSD
Дата 12.1.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Хм....
Ну вообщем то это обычная очередь, причем в зависимости от реализации она может быть как FIFO, так и LIFO. Простейший пример:
Код
Queue queue = new LinkedList();
queue.offer("String 1");
queue.offer("String 2");
queue.offer("String 3");
....
Object obj;
while((obj = queue.poll()) != null)
  System.out.println(obj);


Но это конечно полная банальщина, самые вкусные очереди находятся в java.util.concurrent.
Добавлено @ 22:28
Цитата(Wowa @ 12.1.2006, 22:21 Найти цитируемый пост)
1. Что это означает? public synchronized Object dequeue()
public - это тип метода
dequeue - это название
А остальное???

Object - тип возвращаемого значения
synchronized - метод синхронизирован, т.е. его одновременно может вызывать только один поток. У нас в FAQ есть статья на эту тему.

Но это просто пример реализации очереди (причем неудачный), но отношения в интерфейсу java.util.Queue он не имеет.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Wowa
Дата 12.1.2006, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



А как можно с очередью работать через интерфейс java.utils.Queue ? Вроде в приведенном мною примере, мы просто создали отдельный класс Queue, который основан на Vektor из java.util.*; ?
PM WWW   Вверх
LSD
Дата 12.1.2006, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Ты лучше скажи задачу, потому что реальная польза от Queue будет при использовании пакета java.util.concurrent, а это уже многопоточное программирование и совсем другая песня.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Wowa
Дата 12.1.2006, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



А откуда в твоем примере взялся LinkedList ? Это какой-то стандартный класс, который очередь реализует?


PM WWW   Вверх
LSD
Дата 12.1.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Wowa @ 12.1.2006, 22:29 Найти цитируемый пост)
А как можно с очередью работать через интерфейс java.utils.Queue?

Надо чтобы наш класс Queue реализовывал этот интерфейс.
Цитата(Wowa @ 12.1.2006, 22:29 Найти цитируемый пост)
Вроде в приведенном мною примере, мы просто создали отдельный класс Queue, который основан на Vektor из java.util.*; ?

Да.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Wowa
Дата 12.1.2006, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



Цитата(LSD @ 12.1.2006, 20:30 Найти цитируемый пост)

Ты лучше скажи задачу, потому что реальная польза от Queue будет при использовании пакета java.util.concurrent, а это уже многопоточное программирование и совсем другая песня.


У меня есть класс, который реализует человека. И вот мне надо создать 10 человек и поставить их в очередь.
PM WWW   Вверх
LSD
Дата 12.1.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Wowa @ 12.1.2006, 22:31 Найти цитируемый пост)

А откуда в твоем примере взялся LinkedList ? Это какой-то стандартный класс, который очередь реализует?

Да, это один из стандартных классов которые реализуют очередь. Но вообще их много: AbstractQueue, ArrayBlockingQueue, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue, SynchronousQueue, поэтому я ии спросил про задачу.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Wowa
Дата 12.1.2006, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



Цитата(LSD @ 12.1.2006, 20:32 Найти цитируемый пост)

Надо чтобы наш класс Queue реализовывал этот интерфейс.

Ага, т.е. java.utils.Queue уже есть такой интерфейс в яве? А нам нужно только класс для него сделать.

Так вроде неправильно. А как правильно?
Код

class Queue implements java.utils.Queue {
...
}

PM WWW   Вверх
LSD
Дата 12.1.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Wowa @ 12.1.2006, 22:33 Найти цитируемый пост)
У меня есть класс, который реализует человека. И вот мне надо создать 10 человек и поставить их в очередь.

Если многопоточности нет, то используй LinkedList.
Если есть то надо смотреть на поведение при поступлении нового объекта, что делать когда очередь пуста и т.д.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Wowa
Дата 12.1.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



Такс.. я могу ли я вместо Vektor или же LinkedList очередь через ArrayList сделать?
Какая разница между LinkedList и ArrayList ?
PM WWW   Вверх
LSD
Дата 12.1.2006, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Wowa @ 12.1.2006, 22:36 Найти цитируемый пост)

Ага, т.е. java.utils.Queue уже есть такой интерфейс в яве? А нам нужно только класс для него сделать.

Так вроде неправильно. А как правильно?

Правильно, но надо будет реализовать все методы в интерфейсе java.utils.Queue (а их много), и не желательно называть свои классы именами совпадающими со стандартными классами (хотя и допустимо если объект в другом пакадже).
Добавлено @ 22:48
Цитата(Wowa @ 12.1.2006, 22:40 Найти цитируемый пост)
Такс.. я могу ли я вместо Vektor или же LinkedList очередь через ArrayList сделать?

Запросто, причем даже не обязательно реализовывать очередь (java.utils.Queue). У них есть методы add() - добавить в конец списка и remove() удалить i-тый элемент. В принципе все что надо для простейшей очереди есть.

Цитата(Wowa @ 12.1.2006, 22:40 Найти цитируемый пост)
Какая разница между LinkedList и ArrayList ?

В реализации, ArrayList использует массив для хранения элементов, а LinkedList двусвязный список. Соответсвенно вставка не в конец списка и удаление не из конца списка в ArrayList долгие операции (если массив большой), а у LinkedList долгий поиски i-того элемента (но для очереди это не надо).

Это сообщение отредактировал(а) LSD - 12.1.2006, 22:50


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Wowa
Дата 12.1.2006, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



Цитата(LSD @ 12.1.2006, 20:42 Найти цитируемый пост)

Правильно, но надо будет реализовать все методы в интерфейсе java.utils.Queue (а их много)

Разве обязательно все методы реализовывать?
PM WWW   Вверх
LSD
Дата 12.1.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Wowa @ 12.1.2006, 22:56 Найти цитируемый пост)
Разве обязательно все методы реализовывать?

Конечно! В принципе можно оставить метод пустым или выбрасывать исключение UnsupportedOperationException, но не реализовать их нельзя, компилятор не будет компилировать такой класс.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.