Leia a documentação com detalhes sobre o que classes que implementem RandomAccess devem garantir:
http://java.sun.com/javase/6/docs/api/java/util/RandomAccess.html
Eu tinha lido na primeira vez que você comentou da interface mas não tinha entendido bem pela documentação, por isso perguntei sobre.
No caso, a linkedlist toda vez que chama o método get(i) ela percorreria a lista toda para chegar no elemento ?
Quando comparo coleções com iterators, e faço uma analogia a filmes distribuídos via download completo, ou via streaming.
Com coleções normalmente você já tem todos os elementos em memória, e supõe que a sua memória é grande o bastante para conter todos eles. Também supõe que você tem processamento o suficiente para manipular todos eles de uma vez. O exemplo do filme baixado é que ele ocupa bastante espaço, mas você pode acessar qualquer ponto do filme imediatamente. Também demorou bastante para que você pudesse começar a assistir, pois precisava baixar tudo primeiro.
Com iteradores, você pega o começo de um fio de dados, e vai até o fim um por um. Você só precisa alocar memória para o elemento com que você está trabalhando no momento, e só precisa de processamento para trabalhar com ele. No streaming de filmes, você já pode assistir o filme enquanto recebe ele, porém é capaz de não poder pular cenas.
Fora também que iterators são uma forma padronizada de acessar qualquer coleção. Set, por exemplo, não há como acessar um elemento sem usar um iterator.
A pergunta principal que faço é:
O teu cliente pode esperar 5 minutos até virem todos os registros da base que ele pediu, ou você prefere já mandar os dados assim que ficarem prontos? (não vou entrar em detalhes de paginação aqui)
Humm me dexou ainda mais curioso mas acho que agora não é bem a hora de sair questionando mais hehe
Vou ver se googleio material bom sobre os iterator mas, vou dexar uma questão mesmo assim.
Então, no caso quando você cria um Iterator, você está criando um objeto que tem encapsulado uma forma de acessar um membro por vez, de uma certa fonte.
Em caso de acesso a dados persistidos em um banco ou arquivo por exemplo, entraria bem na sua analogia onde eu iria acessar um elemento por vez sem ter que obter todos antes.
E no caso de usar uma Collection que não implemente RandomAccess, o iterator me permite iterar o objeto sem ter o overhead de iterar do elemento 0 até o x desejado em cada get(index).
Entendi certo até agora ?
E no caso de uma ArrayList então, que implementa o RandomAccess, teria alguma vantagem no uso de iterators ?, mesmo já tendo a ArrayList preenchida em memória.
E muito obrigado pelas respostas e apostilas, etc ajudaram muito.