. , enum ( Java 1.5 EnumSyntax ), - . , Map , -. >, , . , .
In most cases, this is redundant, as linear searching is more than sufficient for performance. But if you perform these searches several times, then this solution provides a one-time hit during initialization.
Code example:
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7),
PLUTO (1.27e+22, 1.137e6);
static {
map = new HashMap<Double, Map<Double, Planet>>();
for (Planet p : Planet.values()) {
if (!map.containsKey(p.getMass())) {
p.put(p.getMass(), new HashMap<Double, Planet>());
}
p.get(p.getMass()).put(p.getRadius(), p));
}
}
private final double mass;
private final double radius;
private static final Map<Double, Map<Double, Planet>> map;
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
public double mass() { return mass; }
public double radius() { return radius; }
public static final double G = 6.67300E-11;
public double surfaceGravity() {
return G * mass / (radius * radius);
}
public double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
public static Planet getPlanet(double mass, double radius) {
if (map.contains(mass)) {
return map.get(mass).get(radius);
}
return null;
}
}
source
share