本帖最后由 whudongyang 于 2011-08-26 16:58:10 编辑

解决方案 »

  1.   

    HashMap put进去是没有顺序的
      

  2.   

    TreeMap有顺序 可以通过comparator排序
    使用构造函数
    TreeMap(Comparator<? super K> c) 
    自然排序 用TreeMap()就行了
      

  3.   

    TreeMap可以获取元素插入的顺序,你那个问题可以搞定
      

  4.   

    @shuwei003
    有直接的api可以调用吗
      

  5.   

    把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]
      

  6.   

    各位:是有这个api可以直接调用的:TreeMap.higherKey(key)
    TreeMap.lowerKey(key)可以实现上面的效果。 
      

  7.   

    如果你是想把4放到3后面,那么直接使用TreeMap往里put就可以,它会自动帮你排序import java.util.Iterator;
    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));
            }
        }
    }
      

  8.   

    遍历键key 取|key - 4|最小的那个key
      

  9.   

    把11L的代码改了一下,现在可以查到相应的key了:
    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