- 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