Classes Internas (Java)/Comparações em Java: Difference between revisions

From Wiki**3

< Classes Internas (Java)
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
Existem em Java duas interfaces relacionadas com a comparação de objectos. A primeira, definida na package principal da linguagem, está relacionada com o conceito de ordem natural dos objectos e é, normalmente, implementada por classes cujas instâncias devem ser passíveis de comparação. A segunda interface corresponde à definição de classes para objectos que funcionam como comparadores. Neste caso, as classes não têm de ser comparáveis, já que os comparadores podem providenciar essa funcionalidade. Os comparadores surgem, por vezes, implementados como classes internas (e.g. '''String.CASE_INSENSITIVE_ORDER''') implementando a interface pública de comparação ('''java.util.Comparator''').
#REDIRECT [[ist:Classes Internas (Java)/Comparações em Java]]
 
== A Interface java.lang.Comparable ==
 
<p>A interface  <strong>Comparable&lt;T&gt;</strong> exige &agrave;s classes que a implementam a cria&ccedil;&atilde;o de um m&eacute;todo (  <strong>T</strong> &eacute; um tipo)</p>
 
<java5>
interface Comparable<T> {
  int compareTo(T other);
}
</java5>
 
<p>Este m&eacute;todo permite estabelecer uma ordem natural sobre objectos do tipo utilizado para parametrizar a interface. Colec&ccedil;&otilde;es desses objectos podem ent&atilde;o ser ordenadas utilizando m&eacute;todos pr&eacute;-definidos (e.g.,  <strong>Collections.sort</strong> ou  <strong>Arrays.sort</strong>).</p>
<p>O m&eacute;todo  <strong>compareTo</strong> deve retornar um inteiro menor que zero, zero, ou maior que zero, caso um objecto seja "menor", igual (  <strong>equals</strong>), ou "maior" que outro objecto. Como a refer&ecirc;ncia  <strong>null</strong> n&atilde;o representa nenhum objecto, se passada como argumento, n&atilde;o dever&aacute; ser retornado nenhum valor, devendo as implementa&ccedil;&otilde;es lan&ccedil;ar  <strong>NullPointerException</strong>. No exemplo seguite, a ordem natural &eacute; definida pela idade do gato.</p>
 
<java5>
public class Cat implements Comparable<Cat> {
  private int _age;
  private String _name;
  public Gato(int age, String name) { _age = age; _name = name; }
  public int getAge() { return _age; }
  public String getName() { return _name; }
  public int compareTo(Cat cat) {
    if (cat == null) throw new NullPointerException();
    return _age - cat.getAge();
  }
}
</java5>
 
<p>Recordar que  <strong>equals</strong> deve retornar  <strong>false</strong> quando &eacute; passada uma refer&ecirc;ncia  <strong>null</strong> como argumento.</p>
 
== A interface java.util.Comparator ==
 
<p>Semelhante ao uso da interface  <strong>Comparable&lt;T&gt;</strong>, mas sem definir uma ordem natural para os objectos de uma classe, a interface  <strong>Comparator&lt;T&gt;</strong> permite criar classes (implementa&ccedil;&otilde;es), cujos objectos representam fun&ccedil;&otilde;es de compara&ccedil;&atilde;o entre dois objectos da classe utilizada como par&acirc;metro do tipo do comparador. O m&eacute;todo exigido pela interface  <strong>Comparator&lt;T&gt;</strong> &eacute;:</p>
 
<java5>
int compare(T um, T outro);
</java5>
 
<p>O uso &eacute; an&aacute;logo ao da interface  <strong>Comparable&lt;T&gt;</strong>, mas n&atilde;o compromete uma classe com nenhuma fun&ccedil;&atilde;o de compara&ccedil;&atilde;o especial. Considerando o exemplo do gato, a defini&ccedil;&atilde;o seguinte permitiria, por exemplo, ordenar gatos por nome (  <strong>String</strong> implementa  <strong>Comparable&lt;String&gt;</strong>, definindo ordem lexicogr&aacute;fica).</p>
 
<java5>
import java.util.Comparator;
public class CatNameComparator implements Comparator<Cat> {
  public int compare(Cat cat1, Cat cat2) {
    return cat1.getName().compareTo(cat2.getName());
  }
}
</java5>
 
Recordar que a compatibilidade com  <strong>equals</strong> e a simetria da compara&ccedil;&atilde;o s&atilde;o como para o caso de  <strong>compareTo</strong> (acima).
 
[[Category:Ensino]]
[[Category:PO]]

Latest revision as of 14:14, 7 November 2018