1.借鉴二分查找法: public static int countsBiger(final Integer[] array, final int i) { final int idx; final int len = array.length; // 先排除首尾的 if (array[0] > i) { return len; } if (array[len - 1] <= i) { return 0; } // 如不包含则借鉴二分查找法进行查找 int midIdx = 0; int n = 2; int tag; while ((tag = (len / n)) >= 0) { midIdx = array[tag]; if (midIdx > i) { if (tag == 0) { break; } // 如果仍比指定值大则继续切割 n *= 2; } else if (midIdx == i) { break; } else { if (array[tag + 1] >= i) { // 如果下个数字就不小于指定数字则结束循环,得出结果为 tag break; } else { // 找出此区间(tag,lastTag)上次切割点)内第一个不小于i的元素 int lastTag = len / (n / 2); while (lastTag - tag > 1) { tag += (lastTag - tag) / 2; if (array[tag] >= i) { break; } } break; } } } return len - 1 - tag; } 2.借用Collections.sort(List list) public static int getCount(List<Integer> list, final int i){ final int idx; final int counts; Collections.sort(list); if((idx = list.indexOf(i)) > -1){ // 如包含则可知比该值大的元素个数为:(size()-1) - index counts = list.size() - 1 - idx; }else{ //如list中不存在,则将i放入list中 list.add(i); Collections.sort(list); counts = list.size() - 1 - list.indexOf(i); } return counts; }