terça-feira, 6 de março de 2007

Java 6 - ArrayDeque

Inspirado na apresentação do JustJava 2006 do Sr. Luis Arnaldo de Gusmão Bastos, conhecido por todos como Luca, vou postar aqui algumas coisas sobre Java 6. Até mesmo para fixação própria. Vamos começar por uma novidade da API, a clsse ArrayDeque.

ArrayDeque é uma implementação da interface Deque sem limitação de tamanho, e que não permite inserção de null. Os Deques são coleções que suportam inserção e remoção bidirecional, ou seja, tanto no começo quando no fim da fila.

ArrayDeque<String> a = new ArrayDeque<String>();
a.addFirst("A");
a.addLast("B");
a.addFirst("C");
a.addLast("D");

// Lista os elementos do ArrayDeque na ordem natural
// C A B D
for(String s:a){
   System.out.printf("%s ",s);
}

// Lista os elementos do ArrayDeque na ordem inversa
// D B A C
Iterator <String>di = a.descendingIterator();
while (di.hasNext()) {
   System.out.printf("%s ", di.next());
}

// Retorna o primeiro elemento ("C"), sem removê-lo
System.out.printf("%s\n", a.peekFirst());

// Retorna o ultimo elemento ("D"), sem removê-lo
System.out.printf("%s\n", a.peekLast());

// Retorna e REMOVE o primeiro elemento
System.out.printf("%s\n", a.pollFirst());

// Retorna e REMOVE o último elemento
System.out.printf("%s\n", a.pollLast());

// O primeiro elemento agora é "A"
System.out.printf("%s\n", a.peekFirst());

ArrayDeque ainda contém outros métodos utilitários como contains(Object), que retorna true se o objeto existir no array, removeFirstOccurrence(Object) e removeLastOccurrence(Object), que removem respectivamente a primeira e a última ocorrência do objeto no array.

Deque implementa Queue, do Java 5, e é uma opção para implementações de filas FIFO. Eu mesmo a teria utilizado a alguns meses atrás, em um projeto onde estava implementado uma fila de mensagens GSM. Um servidor recebia as mensagens numa ponta, e na outra N processos em paralelo retiravam e processavam as mensagens. Teria sido bem útil.

Mais detalhes em http://java.sun.com/javase/6/docs/api/java/util/ArrayDeque.html

Um comentário:

oshiro disse...

Esse ArrayDeck realmente é útil. Qtas vezes eu precisei de uma lista como o ArrayList com algumas funcionalidades a mais!
Acho q o pessoal da sun percebeu essa necessidade e até q enfim colocou na API!