import java.util.TreeMap;
import java.util.Map;
import java.util.Comparator;
import java.util.Iterator;

abstract class Forme {
  double largeur, hauteur;
  abstract double getAire(); // a définir
  String toStringAire() { 
     return "aire = " + getAire();
  } // commune
}

class Rectangle extends Forme {
  Rectangle(double largeur, double hauteur) {
    this.largeur = largeur; this.hauteur = hauteur;
  }
  double getAire() { return largeur*hauteur; }
}

class Ellipse extends Forme {
  Ellipse(double largeur, double hauteur) {
    this.largeur = largeur; this.hauteur = hauteur;
  }
  double getAire() { return Math.PI * largeur * hauteur / 4; }
}

class MapTest {
  public static void main(String[] args) {
    Forme grandRectangle = new Rectangle(6, 10);
    Forme petitRectangle = new Rectangle(5, 10);
    Forme ellipse = new Ellipse(3, 5);
    Comparator c = new OppositeComparator();
    TreeMap arbre = new TreeMap(c);
    arbre.put("GrandRectangle", petitRectangle);
    arbre.put("PetitRectangle", petitRectangle);
    arbre.put("Ellipse", ellipse);
    System.out.println(arbre.firstKey() + " " + arbre.lastKey());
    System.out.println();
    Iterator i;
    i = arbre.keySet().iterator();
    while (i.hasNext()) System.out.println(i.next());
    System.out.println();
    i = arbre.values().iterator();
    while (i.hasNext()) System.out.println(i.next());
    System.out.println();
    i = arbre.entrySet().iterator();
    while (i.hasNext()) {
      Map.Entry e = (Map.Entry) i.next();
      System.out.println(e.getKey() + " -> " + e.getValue());
    }
  }
}

  
