Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>The linear search patterns discussed are ideal for the posed problem. However, in the situation were the enum class grows (or if you're using pre-Java 1.5 type-safe enums using EnumSyntax to create run-time configured enums) you might want something a little faster. In that case, you could define a static initialization block that populates a Map with the values so you can look up by key-value pairs. In this case you would define Map> which is keyed by the mass then the radius. You would then provide a static method that returns the lookup from the map.</p> <p>This is overkill is most circumstances since the linear search is more than sufficient for performance. But if you're perform these look-ups multiple times, then this solution provides a one-time hit at initialization.</p> <p>Example Code:</p> <pre><code>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&lt;Double, Map&lt;Double, Planet&gt;&gt;(); for (Planet p : Planet.values()) { if (!map.containsKey(p.getMass())) { p.put(p.getMass(), new HashMap&lt;Double, Planet&gt;()); } p.get(p.getMass()).put(p.getRadius(), p)); } } private final double mass; // in kilograms private final double radius; // in meters private static final Map&lt;Double, Map&lt;Double, Planet&gt;&gt; map; Planet(double mass, double radius) { this.mass = mass; this.radius = radius; } public double mass() { return mass; } public double radius() { return radius; } // universal gravitational constant (m3 kg-1 s-2) 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; } </code></pre> <p>}</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload