Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 1
Регистрация: 25.12.2016
Сообщений: 108

Интерфейс Queue. Зачем дублируются методы

06.09.2017, 20:12. Показов 1846. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Насколько я знаю - интерфейс Queue добавляет дополнительные операции вставки( boolean add(E e), boolean offer(E e) ), получения + удаления главы очереди( E remove(),E poll() ) и просто получение главы очереди( E element(), E peek() ). Для каждой операции определена пара методов, где один метод в случае неудачи бросает исключение, а второй - возвращает false или null. Как я понял - методы в каждой паре различаются только поведением в случае неудачной попытки обращения к очереди.
Вопрос: почему для каждой операции нельзя было обойтись только одним методом, зачем разработчики стандартной библиотеки
добавили в интерфейс Queue для каждой операции два метода?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.09.2017, 20:12
Ответы с готовыми решениями:

Переполнение Queue, методы оптимизации Queue
Доброго времени суток. Я тут планирую пенгатон взять под контроль.:- StreamReader sr = new StreamReader(road); ...

Зачем в MSVC дублируются типы данных?
Вопрос из любопытства: в VisualC++ используется множество типов данных, которые просто дублируют базовые C-шные. И если появление...

Зачем нужны контейнеры stack, queue, list, если это всё можно заменить вектором?
В чём их преимущество? Оптимизация?

6
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
07.09.2017, 10:09
Тут две причины:
1) основывается на том, что для некоторых программ пустая очередь есть ожидаемое состояние коллекции, следовательно не является исключительной ситуацией. Таким образом АПИ не навязывает пользователю свое видение.
2) производительность. Так что у пользователя также есть возможность сделать так чтоб меньше ресурсов жралось
1
0 / 0 / 1
Регистрация: 25.12.2016
Сообщений: 108
07.09.2017, 16:03  [ТС]
Хотелось бы уточнить несколько моментов:

1. скажите пожалуйста, в каком общем случае невозможность добавления элемента может считаться исключением, а когда
нормальным явлением?
2. В каком общем случае невозможность удаления элемента является нормальным поведением, а в каком - исключительной
ситуацией?

И поясните пожалуйста второй пункт касательно производительности.
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
07.09.2017, 18:11
Касательно производительности: сделать обработку исключения более накладно, чем if'ом проверить на null.
1
0 / 0 / 1
Регистрация: 25.12.2016
Сообщений: 108
08.09.2017, 06:35  [ТС]
Как я понимаю - выбрасывание исключение может использоваться программистом чтобы показать что нарушен контракт использования некоторого метода. Единственная ситуация в которой я могу представить возможное неверное поведение методов добавления элемента в очередь и удаления из неё - это ситуации возникающие в многопоточной программе. Т.е. если бы не было реализаций Queue предназанченных для использования в многопточных программах, то и впричине дублировать
методы небыло бы необходимости. Я прав?
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
08.09.2017, 10:07
Лучший ответ Сообщение было отмечено Bakuard как решение

Решение

Цитата Сообщение от Bakuard Посмотреть сообщение
скажите пожалуйста, в каком общем случае невозможность добавления элемента может считаться исключением, а когда
нормальным явлением?
Невозможность добавления в коллекцию должна(!) являться исключительной ситуацией тогда и только тогда, когда собственно невозможность добавления возникает по независящим от нее (коллекции) обстоятельствам и исправить положение с использованием апи коллекции невозможно.
Пример: пусть у нас есть некая коллекция и криворукий пользователь кода, который пытается подать в нее экземпляр класса, который запрещен к добавлению в данную коллекцию. Это нештатный случай. Что делать непонятно. Получите исключением по мордасам.
А вот если пользователь просто исчерпал доступную память у коллекции, то это вполне себе штатный случай и пользователь получив ошибку может например очистить ее от данных.
Цитата Сообщение от Bakuard Посмотреть сообщение
В каком общем случае невозможность удаления элемента является нормальным поведением, а в каком - исключительной
ситуацией?
Пример 1: пусть у нас есть коллекция у которой отстутсвует АПИ, позволяющее узнать насколько она заполнена. То есть пользователь не может узнать а вообще может ли он что-то извлечь до того как попытается. Это нормальное поведение.
Пример 2: пусть АПИ из 1 есть. Тогда пользователь сам дурак, что не сделал проверку. Он нарушил порядок использования АПИ. Это исключительная ситуация.
Пример 3: пусть есть некая коллекция, которая хранит элементы во внешней среде (не важно где). Пусть для того, чтобы удалить ей нужно:
а) обновить свое внутреннее состяние
б) отправить запрос наружу чтобы удалили
в) получить ответ
г) вернуть результат пользователю
И если что-то снаружи пошло не так и элементы нельзя удалить, то это нарушение порядка работы общей логики приложения (см. первый ответ), бессмыссленный и беспощадный. Также исключительная ситуация.
1
0 / 0 / 1
Регистрация: 25.12.2016
Сообщений: 108
08.09.2017, 12:53  [ТС]
HighPredator, спасибо большое за развернутый, подробный ответ! Считаю что вопрос можно закрыть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.09.2017, 12:53
Помогаю со студенческими работами здесь

Зачем нужны методы?
Зачем нужны методы кто-нибудь может понятными словами объяснить!?

Зачем нужны ссылки на методы?
Типа System.out.println()? Нет, конечно, я понимаю, что они позволяют сократить запись вида s -> System.Out.println(s), но это как-то...

Зачем нужны виртуальные методы?
Тут она не виртуальная Student s; Person &p = s; s.name(); //Student::name() p.name(); //Person::name() А тут наоборот ...

Интерфейс iFormattable. За что он отвечает и зачем он нужен?
Пожалуйста, объясните своими словами что это за интерфейс? за что он отвечает? зачем он нужен? вот например в этой программе мы используем...

Разница между finalization queue и freachable queue
Всем привет, все как-то никак не могу понять, в чем разница


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru