arraylist部分的最大值?

时间:2016-01-08 13:13:53

标签: java arraylist max

我有一些存储在ArrayList1中的int值(想象一个有一列的表)。我需要创建另一个ArrayList2(第二列),它将具有值,即ArrayList1中范围的最大值,例如最后3个值。例如:

1 null
2 null
1 2
3 3
2 3
1 3

因此,secondt列 - ArrayList2将为ArrayList1中最后3个对应行的每行包含最大值。 (与xls相同,B3 = MAX(A1:A3)...)。 我可以通过为每个行创建一个循环来查找最大值,或者我可以循环创建subArrayList并使用collections.max,但这两个解决方案都需要每行一个循环,这不是很实用,有没有更简单的方法?类似arrayList.max(1,3)来直接获取数字?

3 个答案:

答案 0 :(得分:2)

您可以执行类似我在下面显示的代码。您迭代第一个数组,计算最大值并相应地更新第二个数组。请注意,您需要一个额外的数组来存储间隔。

private void m1(List<Integer> array1, List<Integer> array2, int range) {

    Integer[] rangeArray = new Integer[range];

    //Iterate first array

    for(int i = 0; i < array1.size(); i++) {

        Integer x = array1.get(i);

        rangeArray[i%range] = x;

        //Update second array

        if(i < range - 1) {
            array2.add(null);
        }
        else {
            int max = Collections.max(Arrays.asList(rangeArray));
            array2.add(max);
        }
    }
}

答案 1 :(得分:1)

使用Collections.max

    int startFrom = 2; // configurable number
    List<Integer> intList = Arrays.asList(1,2,1,3,2,1,4);
    List<Integer> sortedList =  new ArrayList<>();
    for (int i = 0; i < intList.size(); i++) {
        if(i < startFrom){
            sortedList.add(null);
            continue;
        }
        ArrayList<Integer> list = new ArrayList<Integer>(intList.subList(i -startFrom, i+1));
        sortedList.add(Collections.max(list));
    }
    System.out.println(sortedList);

输出为:[null, null, 2, 3, 3, 3, 4]

答案 2 :(得分:0)

确定。所以你要比较的列表大小可能会有所不同,在这种情况下,要建立一个数组列表来比较数字List<?> list = Arrays.asList( numbersToCompare ); 然后Collections.max( list ),列表应该包含可以比较的对象,换句话说需要具有可比性。 (如果不写自己的比较器)