Java, várias coisas

ArrayList
Um objecto do tipo ArrayList representa uma sequência ordenada de objectos do tipo T. Implementa o interface List.
A seguinte instrução cria um ArrayList vazio de elementos do tipo Produto:
List produtos= new ArrayList();

Alguns métodos:
public boolean add(E e) acrescenta o elemento e ao fim da lista.
public E remove(int index) remove o elemento da posição index, ajustando os índices seguintes; retorna o elemento removido.
public boolean remove(Object o) remove a primeira ocorrência de o, se existir, ou seja remove o elemento com menor índice tal que (o==null ? get(i)==null : o.equals(get(i))) (se esse elemento existir); retorna true se o elemento foi encontrado e eliminado.
public void clear() remove todos os elementos da lista.
public int size() retorna o numero de elementos da lista.
public int indexOf(Object o) retorna o índica da primeira ocorrência de o na lista, ou -1 se não existir.he element, ou seja, retorna o elemento com menor índice tal que (o==null ? get(i)==null : o.equals(get(i))) ou -1 se este índice não existir.
public E get(int index) retorna o elemento da lista na posição índex.

Percorrer um ArrayList:

for( int i = 0 ; i < produtos.size(); i++){
// …  produtos.get(i)
}

for(Produto produto: produtos){
// …  produto;
} 

Interface Iterator
Um iterator é um objecto que lhe permite percorrer uma colecção. As colecções têm um método:
Iterator iterator();

Que retorna um iterator para a colecção que o invoca.

public interface Iterator<E> {
boolean hasNext();  
// retorna true se existem mais elementos 
E next();          
// retorna o próximo elemento da colecção 
void remove();
}

Interface Set
Um set é uma colecção que não pode ter elementos repetidos. Uma das implementações do interface Set é HashSet.
A seguinte instrução cria um HashSet vazio de elementos do tipo Entidade:
Set< Entidade > c = new HashSet< Entidade >();

Percorrer uma colecção com iterator: Iterator it = v.iterator();

while (it.hasNext()){
// … it.next();
}
}

Para verificar se um determinado objecto pertence a um HashSet, é calculado o hashCode do objecto. O objecto é comparado com equals() só com os elementos do HashSet que têm o mesmo hashCode do objecto que está a ser pesquisado.
O objecto é considerado como pertencente ao HashSet se tiver o mesmo hashCode de um elemento e se também em relação a esse elemento a comparação com equals() der verdadeira.
Os objectos que se colocam num HashSet devem dispor de funções equals() e hashCode() devidamente definidas (se x.equals(y) for true, então x.hashCode() == y.hashCode()).

Ao adicionar um elemento a um HashSet, esta operação só tem sucesso (retornando true e adicionando de facto) se o novo elemento não pertencer ainda ao HashSet.

Interface Map
Um objecto do tipo Map representa uma correspondência chave-valor. Não pode haver chaves repetidas.

public interface Map<K,V> {
V put(K key, V value);    
// insere a correspondência de  (key, value) 
V get(Object key);        
// retorna o valor associado a  key
V remove(Object key);     
// remove a associação cuja chave é  key
boolean containsKey(Object key); 
// contém uma associação com chave  key 
boolean containsValue(Object value); 
// contém uma associação com valor  value int size();
boolean isEmpty();        
// estar vazio
void clear();             
// remove todas as associações
public Set<K> keySet();   
// conjunto das chaves
public Collection<V> values(); 
// colecção dos valores
}

Uma das implementações do interface Map é HashMap.
A seguinte instrução cria um HashMap vazio de elementos do tipo Entidade:

Map map = new HashMap();

Percorrer um map:

Set<String> chaves = map.keySet(); 
Iterator<String> iter = chaves.iterator(); 
while (iter.hasNext()) {
String key = iter.next();
str += " \n" + map.get(key);
}

Interfaces Comparable e Comparator
Implementando o interface Comparable a classe define uma ordem natural entre os seus elementos.

public abstract class Cartao implements Comparable<Cartao>{

protected List<Chamada> chamadas = new ArrayList<Chamada>();
private int numero;
private double saldo;
// …
public int compareTo(Cartao o) {
return numero - o.getNumero();
}
// …
}

public class Telefonica {
private String nome;
private Map<Integer, Cartao> cartoes = new HashMap<Integer, Cartao>();
// …
public String toStringPorNumero(){
List<Cartao> listaOrdenada =
new ArrayList<Cartao>(cartoes.values()); //Faz a cópia
Collections.sort(listaOrdenada);
return "Operadora de telemoveis ***" + nome + "***\n"
+ "Lista ordenada por numero:\n" + listaOrdenada;
}
// …
} 

O interface Comparator permite ordenar a mesma colecção segundo diversos critérios.
É preciso definir um objecto do tipo Comparator, neste caso, um objecto da classe OrdenaPorSaldo que vai ser o segundo argumento da função: Collections.sort(listaOrdenada, new OrdenaPorSaldo());

public class Telefonica {
private String nome;
private Map<Integer, Cartao> cartoes = new HashMap<Integer, Cartao>();
// …
class OrdenaPorSaldo implements Comparator<Cartao> {
public int compare(Cartao o1, Cartao o2) {
if (o1.getSaldo() < o2.getSaldo())
return -1;
else if (o1.getSaldo() > o2.getSaldo())
return 1;
else return 0;
}
}
public String toStringPorSaldo(){ List<Cartao> listaOrdenada =
new ArrayList<Cartao>(cartoes.values()); //Faz a cópia
Collections.sort(listaOrdenada, new OrdenaPorSaldo());
return "Operadora de telemoveis ***" + nome + "***\n"
+ "Lista ordenada por saldo:\n" + listaOrdenada;
}
// …
}
Tags : ,

0 thoughts on “Java, várias coisas”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.