Java, várias coisas
ArrayList
Um objecto do tipo ArrayList
A seguinte instrução cria um ArrayList vazio de elementos do tipo Produto:
List
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
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
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
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; } // … }
0 thoughts on “Java, várias coisas”