Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I can think of a number of possible solutions for the more general problem where the ranges are not uniform and there are 'holes'. The simplest are:</p> <ol> <li>Simply populate a Map for all valid key values, with multiple keys mapping to the same value. Assuming that you use HashMaps, this should be the most time efficient (O(1) lookups), though you have more work at setup time and you use more space.</li> <li>Use a NavigableMap and use <code>floorEntry(key)</code> to do the lookups. This should be less time efficient (O(log(N) lookups) but more space efficient.</li> </ol> <p>Here's a solution using NavigableMaps that allows for 'holes' in the mapping.</p> <pre><code>private static class Range { public int upper, value; ... } NavigableMap&lt;Integer, Range&gt; map = new TreeMap&lt;Integer, Range&gt;(); map.put(0, new Range(3, 0)); // 0..3 =&gt; 0 map.put(5, new Range(10, 1)); // 5..10 =&gt; 1 map.put(100, new Range(200, 2)); // 100..200 =&gt; 2 // To do a lookup for some value in 'key' Map.Entry&lt;Integer,Range&gt; entry = map.floorEntry(key); if (entry == null) { // too small } else if (key &lt;= entry.getValue().upper) { return entry.getValue().value; } else { // too large or in a hole } </code></pre> <p>On the other hand, if there are no 'holes' the solution is simpler:</p> <pre><code>NavigableMap&lt;Integer, Integer&gt; map = new TreeMap&lt;Integer, Integer&gt;(); map.put(0, 0); // 0..4 =&gt; 0 map.put(5, 1); // 5..10 =&gt; 1 map.put(11, 2); // 11..200 =&gt; 2 // To do a lookup for some value in 'key' if (key &lt; 0 || key &gt; 200) { // out of range } else { return map.floorEntry(key).getValue(); } </code></pre>
    singulars
    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. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      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