TreeMap有顺序 可以通过comparator排序 使用构造函数 TreeMap(Comparator<? super K> c) 自然排序 用TreeMap()就行了
TreeMap可以获取元素插入的顺序,你那个问题可以搞定
@shuwei003 有直接的api可以调用吗
把key都取出来,放到数组中,进行排序。 Set set = map.keySet(); Object[] array = set.toArray(); Arrays.sort(array); int index = 0; for(int i = 0;i<array.length;i++){ if(3 == (Integer)array[i]){ index = i; break; } } System.out.println(index);取array[index+1/-1]
使用构造函数
TreeMap(Comparator<? super K> c)
自然排序 用TreeMap()就行了
有直接的api可以调用吗
Object[] array = set.toArray();
Arrays.sort(array);
int index = 0;
for(int i = 0;i<array.length;i++){
if(3 == (Integer)array[i]){
index = i;
break;
}
}
System.out.println(index);取array[index+1/-1]
TreeMap.lowerKey(key)可以实现上面的效果。
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class Test {
public static void main(String[] args) {
Map<Integer, String> map = new TreeMap<Integer, String>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
map.put(6, "f");
map.put(7, "g");
map.put(8, "h");
workByKeySet(map);
map.put(4, "d");
System.out.println("------------");
workByKeySet(map); }
public static void workByKeySet(Map<Integer, String> map) {
Set<Integer> key = map.keySet();
for (Iterator<Integer> it = key.iterator(); it.hasNext();) {
Integer s = it.next();
System.out.println(s +":" + map.get(s));
}
}
}
1.如果map为空返回null
2.如果key在map中,直接返回key
3.否则就返回最近的key,可能会有1-2个
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;public class Test {
static Map<Integer, String> map = new TreeMap<Integer, String>();
static Integer[] findKey = new Integer[2];
public static void main(String[] args) {
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
map.put(7, "g");
map.put(8, "h");
System.out.println("------------");
System.out.println("find: " + findKey(3));
System.out.println("find: " + findKey(4));
System.out.println("find: " + findKey(5));
} public static String findKey(Integer keyNum) {
Integer[] getKey = new Integer[] { -1, -1 };
Set<Integer> key = map.keySet();
if (key == null) {
return "map has no elements";
}
if (key.contains(keyNum)) {
getKey[0] = keyNum;
return String.valueOf(getKey[0]);
}
else {
int min = Integer.MAX_VALUE;
for (Iterator<Integer> it = key.iterator(); it.hasNext();) {
Integer s = it.next();
int result = (int) Math.abs(s - keyNum);
if (result <= min) {
min = result;
if ((int) Math.abs(getKey[0] - keyNum) == result) {
getKey[1] = s;
} else {
getKey[0] = s;
getKey[1] = -1;
}
}
}
}
if(getKey[1] != -1){
return getKey[0] + " " + getKey[1];
}
else {
return String.valueOf(getKey[0]);
}
}
}
结果:
------------
find: 3
find: 3
find: 3 7