- The inputs to this program are the number to search: numberToSearch, and the List of numbers to fit the number in: targetList .
- The outputs are the lower bound: lowerBound , and the upper bound: upperBound , which are numbers from the list which encloses numberToSearch .
..................................................................................................................................
..................................................................................................................................
- Input: numberToSearch to fit into targetList.
- Output: lowerBound <= numberToSearch <= upperBound where lowerBound and upperBound are conntained in targetList.
long numberToSearch= .... List targetList= ..... Long lowerBound = targetList.get(0); Long upperBound = targetList.get(targetList.size()-1); Long numberToSearchByReference= new Long(numberToSearch);targetList.add(numberToSearchByReference); Collections.sort(targetList);Long [] targetArray= ListTools.toArray(targetList, Long.class); int index = ListTools.indexOfStable(targetArray, numberToSearchByReference); if(index <= 0) return null; else { lowerBound = ListTools.itemAt(targetArray, index -1, lowerBound); upperBound = ListTools.itemAt(targetArray, index +1, upperBound); }
...........................................................................................................................................................
...........................................................................................................................................................
The following function is based on the OpenGTS source code (ListTools.java) but was modified by me: public static <t> int indexOfStable(T list[], T item) { if (list == null) { /* no list */ return -1; } else { /* constrain offset/length */ int alen = (list != null)? list.length : 0; /* loop through array checking for item */ for (int i = 0; i < alen; i++) { if (list[i] == item) { // also takes care of 'null == null' return i; } } /* still not found */ return -1; } }
................................................................................................ .......................
public static <t> T itemAt(Collection<t> c, int ndx, T dft) { if ((c == null) || (ndx < 0) || (ndx >= c.size())) { return dft; } else if (c instanceof java.util.List) { // Randomly addressable list return ((java.util.List<t>)c).get(ndx); } else { // Serialized collection, iterate to item #ndx for (T obj : c) { if (ndx-- == 0) { return obj; } } return dft; } }
.......................................................................................................................
.......................................................................................................................
The following function is taked from the OpenGTS source code (ListTools.java)public static <t> T[] toArray(Collection list, Class<t> type) { if (type == null) { type = (Class<t>)Object.class; } if (list != null) { T array[] = (T[])Array.newInstance(type, list.size()); // "unchecked cast" return list.toArray(array); } else { return (T[])Array.newInstance(type, 0); // "unchecked cast" } }
No comments:
Post a Comment