从通用数组列表中查找最大值

huangapple go评论85阅读模式
英文:

Find max value from generic arraylist

问题

我想编写一个方法来找到 ArrayList 的最大值。它可以是整数或双精度类型。

我认为下面的代码对于数组有效,但对于 ArrayList 就不行?

public static <T extends Comparable<T>> T maxValue(ArrayList<T> arrayList){       
     T max = arrayList.get(0);
     for(T data: arrayList){
          if(data.compareTo(max) > 0)
              max = data;                
     }
     return max;
}
英文:

I want to write a method to find the max value of arraylist. It could be integer or double type.

I believe the below code works for arrays, but not for arraylist?

public static &lt;T extends Comparable&lt;T&gt;&gt; T maxValue(T[] array){       
     T max = array[0];
     for(T data: array){
          if(data.compareTo(max)&gt;0)
              max =data;                
     }
     return max;
}

答案1

得分: 4

首先,应该是 Comparable<? super T>。其次,参数应该是 Collection<T>(或者 List<T>),而不是数组。最后,已经存在 Collections.max(Collection<? extends T>) 方法,您可以使用它来实现这个方法。就像这样:

public static <T extends Comparable<? super T>> T maxValue(Collection<T> c) {
    return Collections.max(c);
}
英文:

First, it should be Comparable&lt;? super T&gt;. Second, the argument needs to be a Collection&lt;T&gt; (or List&lt;T&gt;) instead of an array. Finally, there is the existing Collections.max(Collection&lt;? extends T&gt;) that you can use to implement the method. Like,

public static &lt;T extends Comparable&lt;? super T&gt;&gt; T maxValue(Collection&lt;T&gt; c) {
	return Collections.max(c);
}

答案2

得分: 2

public static void main(String[] args) {
    System.out.println(maxValue(Arrays.asList(1, 3, 6, 2, 4, 5)));
    System.out.println(maxValue(Arrays.asList(1.7D, 3.2D, 2.5D, 2.1D, 0.05D, 1.84D)));
}

public static <T extends Comparable<T>> T maxValue(List<T> array){
    T max = array.get(0);
    for(T data: array){
        if(data.compareTo(max) > 0)
            max = data;
    }
    return max;
}

同时,如果你将参数类型从 T[] 修改为 List<T>,你的代码也可以适用于 ArrayList。

英文:
public static void main(String[] args) {
    System.out.println(Collections.max(Arrays.asList(1, 3, 6, 2, 4, 5)));
    System.out.println(Collections.max(Arrays.asList(1.7D, 3.2D, 2.5D, 2.1D, 0.05D, 1.84D)));
}

How about this?

public static void main(String[] args) {
    System.out.println(maxValue(Arrays.asList(1, 3, 6, 2, 4, 5)));
    System.out.println(maxValue(Arrays.asList(1.7D, 3.2D, 2.5D, 2.1D, 0.05D, 1.84D)));
}

public static &lt;T extends Comparable&lt;T&gt;&gt; T maxValue(List&lt;T&gt; array){
    T max = array.get(0);
    for(T data: array){
        if(data.compareTo(max)&gt;0)
            max =data;
    }
    return max;
}

Also, your code works for arraylist if you change parameter type from T[] to List<T>

huangapple
  • 本文由 发表于 2020年9月19日 17:10:13
  • 转载请务必保留本文链接:https://go.coder-hub.com/63967095.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定