在某个值之后搜索列表中的最小元素

时间:2010-07-13 16:31:02

标签: java search list sorting

考虑整数列表<1,5,10>(假设按升序排序)。

给定一个整数,比如key = 6,是否有一个实用程序方法返回key之后的最小元素(在这种情况下它将是10)?

注意:循环遍历列表中的元素并将其与key进行比较是一种显而易见的方法,但我只是想知道是否存在一种实用方法来执行相同的操作:)

2 个答案:

答案 0 :(得分:6)

您考虑过Binary Search了吗? Collections有一个你可以使用的binarySearch方法。

来自Collections binarySearch文档:

  

返回:

     

搜索键的索引,如果   它包含在列表中;   否则,( - (插入点) - 1)。   插入点定义为   密钥的位置   插入列表:索引   第一个元素大于   key,或list.size(),如果是所有元素   在列表中小于   指定的密钥。请注意这一点   保证返回值   当且仅当密钥是时,be> = 0   找到。

我会告诉你如何使用Collections.binarySearch的返回值来获得你需要的答案。

答案 1 :(得分:3)

二进制搜索有效,但如果事实上你有一组有序的值,那么SortedSet(或者更好的NavigableSet)代替List,是最多的自然数据结构的选择。

以下是一个示例用法:

    NavigableSet<Integer> nums = new TreeSet<Integer>(
        Arrays.asList(9,1,5,7,3)
    );

    System.out.println(nums); // "[1, 3, 5, 7, 9]"

    System.out.println(nums.first()); // "1"
    System.out.println(nums.last());  // "9"

    System.out.println(nums.higher(3)); // "5"
    System.out.println(nums.lower(8));  // "7"

    System.out.println(nums.subSet(2,8)); // "[3, 5, 7]"
    System.out.println(nums.subSet(1, true, 5, true));  // "[1, 3, 5]"

还有NavigableMap对应物在某些情况下可能更有用。