从重复的排序列表中查找小于或等于X.

时间:2015-08-22 12:48:46

标签: java sorting arraylist

给定一个数组列表并排序

ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(4);
list1.add(15);
list1.add(16);
list1.add(3);
list1.add(3);
list1.add(8);
System.out.println(list1); // [1, 4, 15, 16, 3, 3, 8]
Collections.sort(list1,3);
System.out.println(list1); // [1, 3, 3, 4, 8, 15, 16]

To find larger或在排序的重复列表中相等,比如'3'

int index = Collections.binarySearch(list1, 3);
ArrayList<Integer> list2 = new ArrayList<> (list1.subList(index < 0 ? - index - 1 : index, list1.size()));    

给我们

[3,3,4,8,15,16]

但是对于较小或相同的情况,如何做到这一点?这是我试过的。

ArrayList<Integer> list3 = new ArrayList<> (list1.subList(0, index < 0 ? - index - 1 : index + 1));

输出

[1, 3]

预期产出

[1, 3, 3]

1 个答案:

答案 0 :(得分:1)

您可以使用https://docs.oracle.com/javase/8/docs/api/java/util/List.htmlindexOflastIndexOf方法。一个例子

    List<Integer> list1 = new ArrayList<>();
    list1.add(1);
    list1.add(4);
    list1.add(15);
    list1.add(16);
    list1.add(3);
    list1.add(3);
    list1.add(8);

    System.out.println(list1); // [1, 4, 15, 16, 3, 3, 8]
    Collections.sort(list1);
    System.out.println(list1); // [1, 3, 3, 4, 8, 15, 16]

    //For equals or larger than 3
    int index = list1.indexOf(3);
    List<Integer> list2 = index > -1 ? list1.subList(index, list1.size()) : new ArrayList<>();
    System.out.println(list2); // [3, 3, 4, 8, 15, 16]

    //For equals or smaller than 3
    index = list1.lastIndexOf(3);
    List<Integer> list3 = index > -1 ? list1.subList(0, index + 1) : new ArrayList<>();
    System.out.println(list3); // [1, 3, 3]