PriorityQueue Dúvida  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
rmalati
Virtual Machine Man
[Avatar]

Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline

Pessoal,
me deparei com a sequinte questão do Inquisition que pede qual a saída:



A resposta correta é:
Prints bye 2 followed by an Exception (ConcurrentModificationException)

Só que não consegui entender o motivo de não poder remover um elemento da Queue utilizando um for

Isso acontece com os métodos offer() e poll().

Alguém tem uma explicação?

Obrigado.

Rodrigo Malatesta Barbosa
Graduando em Tecnologia Informática Unicamp
SCJP 1.6 - 93%

"A disciplina é o caminho mais curto para o sucesso"
"Se não puder destacar pelo talento, vença pelo esforço. (Provérbio indiano)"
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Você não pode modificar algumas coleções enquanto está "andando" sobre elas (ou seja, quando você estiver usando um iterador).
[WWW]
rmalati
Virtual Machine Man
[Avatar]

Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline

thingol wrote:Você não pode modificar algumas coleções enquanto está "andando" sobre elas (ou seja, quando você estiver usando um iterador).


Entendi.

thingol, no caso dos conjuntos além de Queue existe outro tipo que ocorre a mesma situação(List, Set, Map)?
Eu to fazendo alguns testes mas até agora não vi nada de errado.

Obrigado.

[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

ArrayList tem esse comportamento (você não pode usar "remove" assim, sem mais nem menos) mas CopyOnWriteArrayList não tem esse comportamento. De qualquer maneira, em uma prova de certificação, saber que classes têm esse comportamento não cai com certeza.
[WWW]
rmalati
Virtual Machine Man
[Avatar]

Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline

valeu ai thingol pela explicação.

Rodrigo Malatesta Barbosa
Graduando em Tecnologia Informática Unicamp
SCJP 1.6 - 93%

"A disciplina é o caminho mais curto para o sucesso"
"Se não puder destacar pelo talento, vença pelo esforço. (Provérbio indiano)"
[Email] [MSN]
Daniel.F
GUJ Ranger

Membro desde: 29/03/2007 18:30:39
Mensagens: 909
Offline



Eu não entendi porque imprime 2 o poll() remove o elemento da lista e depois lança a exceção??


[Email]
rmalati
Virtual Machine Man
[Avatar]

Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline

Eh isso tb não entendi.
Já que não eh permitido remover, pq já não lança a exceção?

Rodrigo Malatesta Barbosa
Graduando em Tecnologia Informática Unicamp
SCJP 1.6 - 93%

"A disciplina é o caminho mais curto para o sucesso"
"Se não puder destacar pelo talento, vença pelo esforço. (Provérbio indiano)"
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Quem lança a exceção não é o remove ou poll ou outra rotina. É o iterator (não sei se é o hasNext ou o next que faz isso, é questão de ver o stack trace.)
Isto aqui:

equivale a:
[WWW]
rmalati
Virtual Machine Man
[Avatar]

Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline

Puts thingol, vc manja muito.
valeu mesmo pela explicação.

Rodrigo Malatesta Barbosa
Graduando em Tecnologia Informática Unicamp
SCJP 1.6 - 93%

"A disciplina é o caminho mais curto para o sucesso"
"Se não puder destacar pelo talento, vença pelo esforço. (Provérbio indiano)"
[Email] [MSN]
ivandasilva
JavaEvangelist
[Avatar]

Membro desde: 03/11/2007 11:48:58
Mensagens: 309
Offline

Aproveitando a deixa, como eu faco para obter os objetos atraves de um iterator em um PriorityQueue ou BlockingQueue...


Grato...

O sol nasce, a bicicleta anda, o lobo uiva e o urso panda.
[WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline



Saída:
[WWW]
rmalati
Virtual Machine Man
[Avatar]

Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline

thingol,
o mais estranho é que se tiver apenas 2 objetos no PriorityQueue, não sobe exceção alguma.


Rodrigo Malatesta Barbosa
Graduando em Tecnologia Informática Unicamp
SCJP 1.6 - 93%

"A disciplina é o caminho mais curto para o sucesso"
"Se não puder destacar pelo talento, vença pelo esforço. (Provérbio indiano)"
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Hum.. só olhando o fonte de PriorityQueue. E é por isso que tal questão do Inquisition não tem a mínima chance de cair na prova desse jeito, porque é mal-formulada.
[WWW]
ivandasilva
JavaEvangelist
[Avatar]

Membro desde: 03/11/2007 11:48:58
Mensagens: 309
Offline

Thingol, obrigado pelo exemplo!!

O sol nasce, a bicicleta anda, o lobo uiva e o urso panda.
[WWW] [MSN]
rmalati
Virtual Machine Man
[Avatar]

Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline

thingol wrote:Hum.. só olhando o fonte de PriorityQueue. E é por isso que tal questão do Inquisition não tem a mínima chance de cair na prova desse jeito, porque é mal-formulada.


Cara, muito estranho né.
tava fuçando nesse tópico http://www.guj.com.br/posts/list/30323.java
mas fiquei foi mais confuso.
Aproveitando já q vc disse, o nível do Inquisition tá muito acima da prova?

Abraço e obrigado novamente pelas respostas.
[Email] [MSN]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team