95
Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López [email protected] /

Java

Embed Size (px)

DESCRIPTION

java

Citation preview

  • Lenguajes de ProgramacinTema 3. Paradigma Orientado a Objetos

    Pedro Garca [email protected]/

  • Estudio de caso: JavaLenguaje:

    SimpleOrientado a ObjetosRobustoArquitectura-neutral (portable)ModernoTipado estticamenteSemi-interpretadoGran conjunto de bibliotecasComputadoraJava Virtual MachineJava APIsPrograma Java

  • Mquina virtualLa mquina virtual garantiza la portabilidad del cdigoTipos de aplicaciones java:Standalone (main y maquina virtual)Applets (en la mquina virtual del navegadorServlets J2EE (ejecutados en un servidor de aplicaciones Web)ProgramaJavaCompiladorProgramaJava enBytecodeJava para MacintoshJava para WindowsJava para Linux

  • Aplicaciones de JavaEnterprise JavaBeansRMIProgramacin distribuidaCORBAJDBCBases de datosJava3DJava2DProgramacin grficaAppletsWWWJava Web StartJavaBeansJNIProgramacinjava.*J2MEAWTProgramacin UISwingSWT

  • Versiones de Java

  • Historia del lenguaje

    1991: El proyecto secreto Green Team equipado con 13 personas, fue designado por Sun para anticipar y planear las futuras tendencias en el mundo de la informtica. Este proyecto a puertas cerradas fue impulsado por Patrick Naughton, Mike Sheridan y James Gosling.

    1992: Se presenta Star7: una versin demo funcional de un controlador de un dispositivo de entretenimiento familiar interactivo, con una interfaz de usuario animada en una pantalla sensible al tacto.

    Estaban tentando a las compaas de cable con la idea de cmo se deban ver sus redes. Era interactivo, y los usuarios podan leer y escribir informacin en el sistema. Pero las compaas no queran perder mucho control. Era demasiado avanzado para la poca, y el equipo de desarrollo, que para ese momento ya eran 70, todava buscaba un mercado al que le pudiese interesar la idea.

  • Historia del lenguaje

    1993: Lleg Mosaic como una manera amigable de acceso a la Web, revolucionando la percepcin del pblico. Internet estaba siendo transformada en la misma red que Sun quera convencer a las compaas de cable que deberan estar construyendo. Todas las cosas que queran hacer en general encajaban perfectamente con la forma en que las aplicaciones estaban escritas, entregadas y usadas en Internet. Era simplemente un accidente increible. Y fue obvio desde ese momento que Java y la Web eran una pareja perfecta hecha en el cielo.

    1994: El equipo retorn para trabajar en un clon de Mosaic basado en la tecnologa Java, al cual llamaron WebRunner (en honor a la pelcula Blade Runner) y que luego se difundi oficialmente bajo el nombre de HotJavaTM.

  • Historia del lenguaje

    1995: La demo que cambi la historia: Hollywood conoce Silicon Valley. Se realiza una demostracin del potencial de Java a travs de una animacin de una molcula. Un mes mas tarde, el equipo estaba preparado para publicar el cdigo binario del navegador en su versin 1.0a, y hacerlo pblico para descargas pblicas y privadas en Internet. Queran que el cdigo fuera testeado por sus amigos y por un grupo mas o menos pequeo de gente de una red informal de desarrolladores. El 22 de Marzo, Lisa Poulson coordin con el peridico San Jose Mercury News para escribir una historia sobre la tecnologa Java basada en el lanzamiento oficial que vendra pronto. El problema: en el artculo se mencionaba un sitio web que todava ni exista, por lo cual el equipo tuvo que dedicarse a montar un website en pocas horas.

  • Historia del lenguaje

    Eric Schmidt y George Paolini establecen acuerdos con Marc Andreessen de Netscape para integrar Java technology en el omnipresente Netscape. Deciden revelar dicho acuerdo en esa misma convencin, lo cual le dio un giro inesperado al release.

    Es all cuando Java se introduce en Internet. Netscape 2.0 introduce la primera JVM (Mquina virtual Java) en un navegador WWW con la filosofa Java: Write once, run everywhere

    1996: Se libera la versin JDK 1.0. Se realiza la primer conferencia JavaOne developer. Se anuncian las tecnologas JavaBeans y Servlets. Se anuncia el primer compilador Just-In-Time (JIT), la Java Card API y finaliza el ao con la JDK 1.1 beta.

    1997: Aparece Java 1.1 final. Se anuncia el lanzamiento del JavaBeans Development Kit, el Java Servlet Developers Kit, la JNDI API, los Enterprise Java Beans, y las Java Foundation Classes.

  • Historia del lenguaje1998: Java 1.2 (Java 2). Plataforma muy madura.Apoyado por grandes empresas: IBM, Oracle, Inprise, Hewtlett-Packard, Netscape, Sun. VISA anuncia la primera tarjeta inteligente basada en la tecnologa Java Card. Se formaliza el Java Community Process.

    1999: Java Enterprise Edition. Java comienza a ser una plataforma de desarrollo profesional. Sumado a esto se lanza la J2ME.

    2000: Se anuncia el lanzamiento de la API de Java para XML y la J2SE 1.3.

    2001: Se publica el catlogo de patrones para J2EE. Se publica Java Web Start 1.0

    2002: Se publica el Java Web Services Developer Pack, ms la versin 1.4 Beta de J2EE

    2004: Se lanza la versin 1.5 de Java conocida como Tiger.

  • Hola Mundo/* * Example HelloWorld * Prints the message "Hello, World! */public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world.); }}

  • Palabras reservadasabstractbooleanbreakbytebyvaluecasecastcatchcharclassconstcontinuedefaultdodoubleelseextendsfalsefinalfinallyfloatforfuturegenericgotoifimplementsimportinnerinstanceofintinterfacelongnativenewnulloperatorouterpackageprivateprotectedpublicrestreturnshortstaticsuperswitchsynchronizedthisthrowthrowstransienttruetryvarvoidvolatilewhile

  • Tipos Simples

    Tipos Simples

    Tamao

    Valor Mnimo

    Valor Mximo

    Tipos Wrapper

    boolean

    1-bit

    -

    -

    Boolean

    char

    16-bit

    Unicode 0

    Unicode 216-1

    Character

    byte

    8-bit

    -128

    +127

    Byte

    short

    16-bit

    -215

    +215-1

    Short

    int

    32-bit

    -231

    +231-1

    Integer

    long

    64-bit

    -263

    +263-1

    Long

    float

    32-bit

    IEE754

    IEE754

    Float

    double

    64-bit

    IEE754

    IEE754

    Double

    void

    -

    -

    -

    Void

  • Sistema de tipos

  • Arrays: tipos parametrizablesint lista [] = {1,2,3,4,5};for (int i = 0; i< lista.length; i++){lista[i] = lista[i] + 1;System.out.println(lista[i]);}int lista2[] = new int[10];char lista_char[] = new char[100];char lista_char2 = {a,b,c};

    Los arrays en Java son de tamao fijo y solo indexables por enteros (0..size)

  • Bloques

  • Comandos y secuenciadoresif (expressBool) { ....} else { ....}switch (selector) { case valor1: instrucci1; break; case valor2: ........... ... default: instrucciN;}selector: char,byte,short,int

  • Comandos y SecuenciadoresBucles FOR: for (; ;)for (int i=0; i
  • Clases en JavaLenguaje tipado estticamenteLegibleNo separacin en fichero interfaz e implementacin.Lenguaje semi-interpretado: Mquina Virtual Java + bytecodesAtributos y variables de clase Mtodos de instancia y de claseIncluye metaclases (Reflexin)

  • Ejemplo: Cuenta

    class Cuenta {

    private Stringtitular;

    private int

    saldo;

    private int codigo;

    private int[] ultOper;

    private static int ultimoCodigo = 0;

    public static int nuevoCodigo () {return ++ultimoCodigo;}

    public Cuenta (String quien) {

    saldo=0; titular=quien;

    codigo = nuevoCodigo(); ultOper = new int[100];}

    public void reintegro (int suma) {

    if (puedoSacar(suma)) saldo=saldo-suma;};

    public void ingreso (int suma) {saldo=saldo+suma;}

    public int getSaldo () { return saldo; }

    private booleanpuedoSacar(int suma) {return (saldo >=suma);}

    }

  • Creacin de ObjetosConstructores: mtodos con el nombre de la clase que no devuelven nada (void).Acceso a las variables de instancia de la clase mediante mtodos de instancia (set y get).

    Cuenta c = new Cuenta (pedro);c.reintegro(10000);c.ingreso(20000);int x = c.getSaldo();

  • Propiedades de clase: staticclass Cuenta { private String titular; public static int interes=3;

    public int setInteres(int cantidadPts){interes= cantidadPts} Que ocurre ?

  • Propiedades de claseNo podemos acceder desde variables de clase a variables de instancia.// Mtodo de clasepublic static int setInteres(int cantidadPts){interes= cantidadPts}

  • Propiedades de clasepublic class HelloWorld { public static void main(String[] args) { Cuenta.setInteres(12); Math.sqrt(9); }} Las propiedades de clase son vlidas para todos los objetos de la clase.

  • Clases Java y Ocultacin de Informacinpackageaccesible por las clases del paquete, no accesible a los clientes del paquetepublicaccesible por todas las clasesprivateslo accesible por los mtodos de la claseprotectedaccesible por las clases del paquete y por las subclases

  • Visibilidad

  • AsignacinUn objeto asociado a una variable cambia cuando se evala una expresin de asignacin.variable = expresin

    miObjeto= otroObjeto;

    El operador = no hace una copia del objeto

  • Asignacin y cloningPoint p = new Point (1,1); Point p2 = p; p2.setLocation(120,120); //Aliasing System.out.println("Valor de p:" + p.getX()); System.out.println("Valor de p2:" + p2.getX()); Point p3 = (Point)p.clone(); p3.setLocation(40,40); System.out.println("Valor de p:" + p.getX()); System.out.println("Valor de p3:" + p3.getX());

  • Copia en JavaLa clase Object incluye el mtodo protected Object clone( ) {..} ..}que implementa una copia superficial.

    Para poder clonar objetos de una clase se debeDeclarar que implementa la interfaz CloneableRedefinir y hacer pblico el mtodo clone()Dejar la versin original (copia superficial) o bien hacer una copia de mayor profundidad.

  • Paso de Parmetros class PassByValue { public static void modifyPoint(Point pt, int j) { pt.setLocation(5,5); j = 15; } public static void main(String args[]) { Point p = new Point(0,0); //1 int i = 10; modifyPoint(p, i); //2 //3 } }

  • Arrays y ClasesCuenta lista_cuentas [] = new Cuenta[10];O bien:Cuenta lista_cuentas[];lista_cuentas = new Cuenta [10];

    Qu ocurre si ahora intento hacer lo siguiente ?lista_cuentas[0].ingreso(100);

  • Arrays y clasesLa inicializacin del array no instancia n objetos del tipo establecido !!!Los deja a null por defectoCuenta lista_cuentas [] = new Cuenta[10];Cuenta micuenta = new Cuenta(pedro);Cuenta sucuenta = new Cuenta(pepe);lista_cuentas[0] = micuenta;lista_cuentas[1] = sucuenta;lista_cuentas[0].ingreso(100);

  • Arrays: Tipo parametrizableint lista [] = new int[100];lista[0]=1;for (int i=0;i
  • Tipos bsicos y clasesTipos Wrapper, una clase por cada tipo bsico, permite conversin Clase Tipo primitivo (Integer, Float, Char, Double)int a =1; int b= 2*3;Integer awrap = new Integer(a); int x = awrap.intValue();

  • La clase java.lang.StringEs una clase, pero tiene facilidades con el constructorSi se quiere eficiencia en la concatenacin y manejo de cadenas usar StringBuffer.String nombre = new String(pedro);Es equivalente a:String nombre = pedro;String total = nombre + garcia;

  • Concepto de Metaclase: RTTIRun Time Type IdentificationObjectClass getClass()ClassgetFieldsgetMethodsgetName(...)

    Cuenta c = new Cuenta(pedro);Class miclase = c.getClass();System.out.println(miclase.getName());

  • Agrupacin de clases: Packagepackage pedro.utils;import pedro.utils.*;import pedro.*; // No es jerrquicoimport pedro.utils.Cosa;java.lang --- general java.awt --- GUI java.io --- I/O java.util --- utilities java.applet --- applet java.net --- networkingPaquetes Java

  • Relaciones entre clasesComposicn: Tiene - Un

  • Relaciones entre clasesHerencia: Es -Un

  • ClientelaUna Cuenta tiene un propietario de tipo Cliente:Class Cuenta {private Cliente propietario;() }Un Banco tiene N cuentas:Class Banco {private Cuenta lista_cuentas[];() }

  • Herencia en Javapublic class X extends Y {...}

  • Sintaxis de claseLa clase Objectthis y super[ ClassModifiers ] class ClassName [ extends SuperClass ] [ implements Interface1, Interface2 ...] { ClassMemberDeclarations }

  • La clase Objectprotected Object clone() Creates and returns a copy of this object.boolean equals(Objectobj) Indicates whether some other object is "equal to" this one.protected void finalize() Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.Class getClass() Returns the runtime class of an objectString toString() Returns a string representation of the object.

  • ObjectTodas las clases heredan de ObjectClass Cuenta [extends Object]Se pueden redefinir los mtodos equals, clone y toString.Hay que tener mucho cuidado al comparar objetos entre si, no es igual que comparar tipos bsicos:int x = 3;int y = 5;if (x ==y) then ()Cuenta c = new Cuenta(pedro);Cuenta d = new Cuenta(pepe);if (c ==d) then () NO !!!!

  • EjemploClass Coche {private String marca;private int precio;public Coche (String marca, int precio){this.marca = marca;this.precio = precio;}public int getPrecio(){return precio;}

  • Ejemplopublic String getMarca(){return marca;}public boolean equals (Object obj){Coche otro = (Coche) obj;return (otro.getPrecio()==this.precio)&&(otro.getMarca().equals(this.marca);}

  • Ejemploprotected Object clone(){return new Coche (marca, precio);}public String toString (){return (+marca+,+precio+);}

  • Ejemplopublic static void main (String args[]){Coche micoche = new Coche (bmw,100);Coche otrocoche = new Coche (seat,10);if (micoche.equals(otrocoche))System.out.println(iguales);System.out.println(micoche);}

  • Tipos de herenciaPara referirse a la instancia actual usamos this y para referirnos a nuestra clase padre usamos super.

    Herencia de redefinicin de mtodosRefinamientoReemplazoHerencia abstractaHerencia de interfaces

  • Ejemplo: La granja de animales

  • Herencia de reemplazo

  • Herencia de refinamiento

  • Clases abstractasAlgn mtodo no se implementaNo podemos instanciar una clase abstractaLa clase abstracta puede tener mtodos no abstractosLa clase abstracta debe ser heredada.public abstract class Figura{public abstract dibujar();}

  • Ejemplo herencia abstracta

  • Cuidado con la herencia abstracta !Si la clase Animal tiene aunque sea un mtodo abstracto entonces es ua clase abstracta:Animal mianimal = new Animal (); ERROR !!!!No podemos instanciar una clase abstracta !! Qu pasara si hacemos :?mianimal.habla();

    Si una clase hereda de una clase abstracta ha de implementar los mtodos abstractos de la clase padre, o ser tambin abstracta

  • PolimorfismoTipo esttico: Tipo asociado en la declaracinTipo dinmico: Tipo correspondiente a la clase del objeto conectado a la entidad en tiempo de ejecucinConjunto de tipos dinmicos:Conjunto de posibles tipos dinmicos de una entidadoa: A; ob: B; oc; C; te(oa) = Actd(oa) = {A,B,C,D,E,F}te(ob) = Bctd(ob) = {B, D, E}te(oc) = Cctd(oc) = {C,F}Ejemplo:

  • Conexin polimorfaCuando el origen y el destino tiene tipos diferentes:a) asignacin: p = r;-- p es una entidad polimorfa

    b) paso de parmetros: comer (Animal a ) f es una rutina polimorfa, me puedo comer cualquier animal (perro, gato, )

    Slo se permite para entidades destino de tipo referenciap:POLIGONO; r:RECTANGULO

  • Polimorfismo y ligadura dinmicaJava es un lenguaje tipado estticamente

    La ligadura de un mensaje a un mtodo concreto se realiza en tiempo de ejecucin

    Qu versin de permetro se ejecuta en cada mensaje? f= new Poligono ();f.perimetro();{i}r = new Rectangulo();r.perimetro();{ii}f=r;f.perimetro();{iii}

  • Ejemplo polimorfismo

  • Ejemplo polimorfismo (2)

  • PolimorfismoAnimal a = new Animal();Perro p;a = p;Object x;Perro p = new Perro();x = p;Perro p2 = (Perro) x;

  • Polimorfismo y castingsObject list [] = new Object[3];String s = lala;Perro p = new Perro();list[0] = s;list[1] = p;Object x = list[0];Perro p2 = (Perro) list[1];

  • PolimorfismoObject list [] = new Object[3];Integer i1 = new Integer(3);int z = 74;Integer i2 = new Integer(4);list[0] = i1;list[1] = i2;Object x = list[0];Integer r2 = (Integer) list[1];int resul = z2.intValue();

  • InterfacesSon clases en las que todos las propiedades son estticas y finales y todos los mtodos son abstractos.Permiten la herencia mltiple, y separacin de especificacin e implementacin.Se aplican las mismas reglas que la herencia de clases en las asignaciones polimrficasinterface Persona{public void habla();}interface Perro{public void ladra();}

  • Interfaces y herenciapublic class Mutante implements Persona, Perro {public void habla(){System.out.println(Soy una persona);}public void ladra(){System.out.println(GUAU);}}

  • Interfaces y polimorfismoMutante m = new Mutante();Persona p = m;p.habla();Perro p = m;m.ladra();

  • Interfacesclass Prueba{public static void ladra (Perro p){ p.ladra();{public static void habla(Persona p){ p.habla()}

  • InterfacesMutante m = new Mutante();Prueba.habla(m);Prueba.ladra(m);

    No podemos instanciar una interface, pero si asignarle una instancia de una clase que implemente esta interface:

    Persona p = new Mutante;

  • Excepciones JavaProporcionan una manera limpia de comprobar errores sin complicar el cdigoProporcionan, adems, un mecanismo para sealar directamente los errores sin necesidad de usar indicadores (atributos, parmetros).Son lanzadas cuando se detectan situaciones imprevistas de error.

  • Excepciones JavaBufferedReader br;int codigoProducto = Integer.parseInt (br.readLine() )

    Puede suceder algo inesperado como que:br represente un fichero sobre un disco flexible que se ha extradobr represente una conexin en red y se produzca una cada de la redbr represente un fichero en mal estado sobre el disco duroel usuario introduzca un carcter no numricoel usuario introduce un cdigo numrico incorrectoSituaciones que deben ser manejadas por excepciones

  • Excepciones JavaLas excepciones son objetos. Hay dos tipos:ComprobadasNo comprobadasNecesidad de definir subclases de Exception o RunTimeException.

  • Jerarqua de Tipos de Excepciones JavaObjectThrowableExceptionErrorRunTimeExceptionNo comprobadasComprobadas

  • Excepciones ComprobadasSubclases de ExceptionUn mtodo que lance una excepcin comprobada, debe especificarlo en su signatura.El cdigo que invoca un mtodo que puede lanzar una excepcin comprobada debe manejarla mediante una clusula try-catch.Situaciones comprobadas por el compilador

  • Excepciones No ComprobadasSubclases de RuntimeExceptionUn mtodo puede lanzar una excepcin no comprobada, sin especificarlo en su signatura.El cdigo que invoca un mtodo que puede lanzar una excepcin no comprobada no debe manejarla. Es recomendable listar todas las excepciones en la signatura para facilitar su uso.Cmo elegimos si una nueva excepcin es comprobada o no comprobada?

  • Uso de Excepciones Comprobadaspublic class ClaveNoExiste extends Exception {public ClaveNoExiste() { super(); } }// mtodo en TablaHashpublic void cambiarValor (String clave, Object valor) throws ClaveNoExiste { if (obtener(clave) == null) throw new ClaveNoExiste ();}TablaHash unaTabla;...try { unaTabla.cambiarValor(s,v);} catch (ClaveNoExiste e) {...} finally {...}

  • Excepciones ComprobadasQu puede hacer el cliente de un mtodo que lanza una excepcin comprobada?

    1) Capturarla y manejarla2) Capturarla y asociarla a una de las excepciones declaradas en el mtodo.3) Declararla en la clusula throws y no manejarla, con lo que se propaga al mtodo que lo invoc.

  • Excepciones No ComprobadasQu puede hacer el cliente de un mtodo que lanza una excepcin no comprobada?

    1) Si no la captura se propaga al mtodo que lo invoc.2) Tambin puede capturarla y manejarla.3) Capturar la excepcin y asociarla a una de las excepciones declaradas en el mtodo.

  • Excepciones Javatry {Sentencias con mensajes que pueden provocar excepciones } catch (unaExcepcion e) {codigo manejo excepcin

    } catch (OtraExcepcion e) {codigo manejo excepcin

    } finally {...} // se ejecuta se lance o no una excepcin

  • Excepciones en Javatry{//sentencias}catch (TipoExcepcion1 e){//manejar excepcin}catch (TipoExcepcion2 e){//manejar excepcin} ...

    finally{//sentencias que se ejecutan SIEMPRE//salte o no una excepcin}Ej: cerrar ficherosUna excepcines un objeto!

  • Ejemplos

    public static int factorial (int n) throws NonPositiveException{if (n

  • Ejemplospublic static int search (int [] a, int x) throws NullPointerExceptionNoEncontradoException{ }

    try { ;try { x = Arrays.search(v,7);}catch (NullPointerException e) {throw new NoEncontradoException(); }} catch (NoEncontradoException e) {..}

    Debo declarar NullPointerException en la signatura?Es acertado considerar la situacin de elemento no encontrado como una excepcin?

  • Captura de excepciones no comprobadas

    try { x = y [n]; i = Arrays.search(z, x);}catch (IndexOutOfBoundsException e) {manejar la excepcin en el caso del acceso y[n] }

    No se sabe la procedencia exacta de la excepcin no comprobada IndexOutOfBoundsException

    Restringir el mbito de la sentencia try

  • Ejemplos

    public class Arrays {public static int min (int [] a) throws NullPointerException, EmptyException{ // EFECTO: Si a es null lanza NullPointerException, si no si a // est vaco lanza EmptyException, si no retorna el valor mnimo // del array aint m;try { m = a[0]; }catch (IndexOutOfBoundsException e) {throw new EmptyException(Arrays.min); }for (int i = 1; i < a.length; i++) if (a[i] < m) m = a[i];return m; }

  • Ejemplos

    public class Arrays {public static boolean sorted (int [] a) throws NullPointerException, EmptyException{ // EFECTO: Si a es null lanza NullPointerException, si no retorna // true si el array est ordenado en orden ascendente si no false

    int prev;try { prev = a[0]; }catch (IndexOutOfBoundsException e) { return true; }for (int i = 1; i < a.length; i++) if (prev

  • Ejemplo cdigo genricojava.util.Collection

  • Ejemplo: cdigo genricoboolean add(Object)boolean addAll(Collection)void clear()boolean contains(Object)boolean containsAll(Collection)boolean isEmpty()Iterator iterator()boolean remove(Object)boolean removeAll(Collection)boolean retainAll(Collection)int size()Object[] toArray()

  • boolean hasNext()Object next()void remove() [implementacin opcional]Por ejemplo: public void escribir (Collection c) { for (Iterator it=c.iterator(); it.hasnext();) { System.out.println(it.next()); } }Iteradores

  • Genericidad y JavaJava no posee genericidad (hasta el Jdk1.5)Necesidad de declaraciones de tipo ObjectProblemas: Necesidad de conversiones de tipoNo se asegura homogeneidadIncluye genericidad para arrays private Cuenta[ ] cuentas = new Cuenta[100]private int[ ] valores = new int [4]

  • Estructuras de datos polimorfasContiene objetos de diferentes clases

    Ejemplo: Array con cualquier variante de Figura

    Figura conjFig = new Figura[10];p= new Poligono(); r = new Rectangulo(); c = new Circulo();.t = new Triangulo();

    conjFig[0]=p;conjFig[0]=r;conjFig[0]=c;conjFig[0]=t; conjFig

  • Estructuras polimorfas y cdigo genrico

    public void dibujarFiguras() { for (int i=0;i

  • Ejemplo colecciones

  • Ejemplo HashMap

  • Ejemplo Cdigo genricojava.util.Comparator int compare(Object o1, Object o2) Compares its two arguments for order.Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. boolean equals(Object obj) Indicates whether some other object is "equal to" this Comparator.java.util.Collectionsstaticvoid sort (List list, Comparator c) Sorts the specified list according to the order induced by the specified comparator.

  • Ejemplo